我正在编写一些代码,其中我已经定义了几个函数。所有这些函数都接受一个列表作为输入,然后返回一个变异的列表。然后是最后一个函数,它使用列表理解来进行x次的变异。
当它完成一个“循环”时,函数应该使用变异的列表作为输入,然而,我似乎找不到这样做的方法。它不断地循环同一个列表,导致错误的输出。当它完成所有这些突变时,它应该打印所有创建的列表的长度的列表。
我已经在没有列表理解的情况下解决了这个问题。它是有效的,但我希望能够通过理解来做到这一点。
注意: kills & reproduce是带有一些参数的预定义函数
函数+参数:
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)]]
工作代码更改病毒列表,并在下一次运行中使用更改后的列表。在另一段代码中,它反复使用相同的病毒列表
发布于 2019-10-09 11:38:53
您需要正确地定义列表理解。下面的代码片断将返回给定时间戳内从再现方法生成的病毒的长度列表
return [len([virus for virus in reproduce(kill(viruses, mortalityProb), mutationProb, reproductionProbability(viruses, maxReproductionProb, maxPopulation))]) for step in range(timesteps)]
O/P将看起来像[3,4,5]
https://stackoverflow.com/questions/58302584
复制相似问题