此功能应该列出病毒列表,如[ATCG,GTAC .....]和deathProb(浮点数在0和1之间),表示病毒死亡/从列表中删除的可能性。它应该返回一个包含剩余病毒的新列表。每种病毒都有个别死亡的机会,因此死亡率为0.6,应该有大约60%的病毒存在。
它应该可以在2行(包括def kill(病毒,deathProb):)和我的代码行使用列表推导。
def kill(viruses, mortalityProb):
for i in viruses:
if random.randint(0, 100) < (mortalityProb * 100):
del i
return viruses
这不太合适,但我无法理解为什么。
答案 0 :(得分:3)
执行此操作的一种方法是病毒。删除(i)。但是,请在迭代时查看有关更改列表的各种帖子。
你可以把它变成一个单行;只需为每种病毒调用random
,如果“豁免检定”有效,请将其包括在内。
return [i for i in viruses if random.random() < mortalityProb]
例如:
>>> viruses = [x for x in range(20)]
>>> [i for i in viruses if random.random() < 0.75]
[0, 1, 3, 6, 7, 9, 10, 11, 12, 13, 15, 17, 18, 19]
顺便说一句,你的变量名称错误:mortalityProb
应该描述有机体死亡的可能性,而不是生存。
答案 1 :(得分:0)
因为在for循环中&#34; i&#39;实际上并不是列表中的元素。您必须实际更改病毒列表。这样的事可能有用。
def kill(viruses, mortalityProb):
for x,i in enumerate(viruses):
if random.randint(0, 100) < (mortalityProb * 100):
viruses.pop(x)
return viruses