根据随机生成的数字从列表中删除元素

时间:2017-12-07 20:53:24

标签: python python-3.x list random

此功能应该列出病毒列表,如[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

这不太合适,但我无法理解为什么。

2 个答案:

答案 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