【发布时间】:2019-10-09 10:55:38
【问题描述】:
我正在编写一些代码,其中已经定义了几个函数。 所有这些函数都将一个列表作为输入,然后返回一个变异列表。然后是最后一个函数,它使用列表理解来执行这些突变 x 时间。
当它完成 1 个“循环”时,函数应该使用变异列表作为输入,但是,我似乎无法找到执行此操作的方法。它不断在同一个列表上循环,导致错误的输出。当它完成所有这些突变后,它应该打印所有已创建列表的长度列表。
我已经在没有列表理解的情况下解决了这个问题。它有效,但我希望能够通过理解来做到这一点。
注意:杀死和复制是带有一些参数的预定义函数
函数+参数:
def simulate(viruses, mortalityProb, mutationProb, maxReproductionProb, maxPopulation, timesteps = 500):
有效的代码:
population = [len(viruses)]
for step in range(timesteps):
viruses = reproduce(kill(viruses, mortalityProb), mutationProb, reproductionProbability(viruses, maxReproductionProb, maxPopulation))
population.append(len(viruses))
return population
不起作用的代码:
return [len(virus) for virus in [reproduce(kill(viruses, mortalityProb), mutationProb, reproductionProbability(viruses, maxReproductionProb, maxPopulation)) for step in range(timesteps)]]
工作代码对病毒列表进行变异,并在下一次运行中使用变异列表。在另一段代码中,它一遍又一遍地使用相同的病毒列表
【问题讨论】:
-
一个可重现的小例子就可以了,但不应该是
return [len(virus) for step in range(timesteps) for virus in [reproduce(kill(viruses, mortalityProb), mutationProb, reproductionProbability(viruses, maxReproductionProb, maxPopulation))]]吗?
标签: python-3.x list-comprehension