【问题标题】:Re-define list within list-comprehension - Python 3.7在列表理解中重新定义列表 - Python 3.7
【发布时间】: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


【解决方案1】:

您需要正确定义列表推导式。下面的代码 sn-p 将返回给定时间戳从重现方法生成的病毒长度列表

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]

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2013-01-26
    • 1970-01-01
    • 2021-04-20
    • 2011-06-15
    • 2015-08-12
    • 2021-10-04
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多