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

2024-09-29 21:40:01 发布

您现在位置:Python中文网/ 问答频道 /正文

此函数应获取一个病毒列表,如[ATCG,GTAC….]和一个表示病毒死亡/从列表中删除的几率的致命粒子(介于0和1之间)。它应该返回一个包含剩余病毒的新列表。每一种病毒都有一个单独的死亡机会,所以当致死概率为0.6时,应该有60%左右的病毒仍然存在。你知道吗

它应该有两行代码(包括def kill(viruses,vertalityprob):)和我使用列表理解的代码行。你知道吗

def kill(viruses, mortalityProb):
    for i in viruses:
        if random.randint(0, 100) < (mortalityProb * 100):
            del i
    return viruses

这不太管用,但我不明白为什么。你知道吗


Tags: 函数代码列表def粒子概率机会kill
2条回答

一种方法是病毒。删除(i) 是的。但是,可以在遍历列表时看到关于更改列表的各种帖子。你知道吗

您可以将其设为一行程序;只需为每个病毒调用random,如果“saving throw”有效,则将其包含在内。你知道吗

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应该描述有机体死亡的几率,而不是存活的几率。你知道吗

因为在for循环中,“i”实际上不是列表中的元素。你必须改变病毒列表。像这样的办法也许行得通。你知道吗

def kill(viruses, mortalityProb):
    for x,i in enumerate(viruses):
        if random.randint(0, 100) < (mortalityProb * 100):
            viruses.pop(x)
    return viruses

相关问题 更多 >

    热门问题