【问题标题】:KeyError: 0 , while running while loopKeyError: 0 ,同时运行 while 循环
【发布时间】:2020-02-14 19:10:49
【问题描述】:

我正在尝试创建一项功能,但现在我的代码一直卡在某个位置,出现以下错误:

in stochasticUniversalSampling
    if fitness_prob[j] > points[i]:
KeyError: 0

我正在尝试为每条染色体分配一个长度与其适应度相等的范围,以及在前一条染色体的终点之后的起点(例如,第一条染色体 0-1.53​​,第二条染色体 1.54-2.26,第三条染色体 2.27- 3.42 等)。选择范围包含标记的染色体(注意,一条染色体可能有 2 个标记,在这种情况下会选择两次)。

city.txt

5
1 823170 415922
2 793699 274913
3 981665 218777
4 878910 431320
5 910125 405907

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。
  • 错误消息通知您值 0 不是您的字典中的键。您未能提供引发错误所需的执行跟踪或驱动程序。
  • 好的,我会更新问题。
  • 错误消息中的行没有出现在您的代码中的任何位置。
  • @Barmar,对不起,我用你的建议更新了那行if fitness_prob[self.population[j]] > points[i]:

标签: python python-3.x list pycharm


【解决方案1】:

当您创建 fitness_prob 时,您使用来自 self.population 的值作为键。但是在while 循环中,您使用fitness_prob 的索引作为键,而您应该使用这些值。变化:

if fitness_prob[j] > points[i]:

if fitness_prob[self.population[j]] > points[i]:

【讨论】:

  • 卡在无限循环中。
  • while len(parents) < N: 如果不将N 项目添加到parents 将是一个无限循环。
  • 好的,有没有更简单的方法来比较fitness_prob和points?
  • 这是比较它们的好方法。我认为问题可能出在您的逻辑上。
  • 如果条件没有得到足够的满足,你将永远无法摆脱循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
相关资源
最近更新 更多