【发布时间】:2017-12-07 20:53:24
【问题描述】:
这个函数应该获取一个病毒列表,如 [ATCG, GTAC.....] 和一个代表病毒死亡/从列表中删除的几率的死亡率概率(介于 0 和 1 之间的浮点数)。它应该返回一个包含剩余病毒的新列表。每种病毒都有各自的死亡机会,因此如果死亡率概率为 0.6,则应该有大约 60% 的病毒剩余。
它应该在 2 行中可行(包括 def kill(viruses, deathProb):) 和我使用列表推导的代码行。
def kill(viruses, mortalityProb):
for i in viruses:
if random.randint(0, 100) < (mortalityProb * 100):
del i
return viruses
这不太行,但我不明白为什么。
【问题讨论】:
-
del i表示“取消分配i变量”。仅此而已;它不会从任何列表中删除任何对象。 -
一种方法是
viruses.remove(i)。但是,请参阅有关在迭代列表时更改列表的各种帖子。 -
@Prune 给出了很好的答案,但是,请记住,编写单行代码不是 pythonic 方式,编写可读代码是最佳实践!但是现在,@Prune 的答案仍然具有足够的可读性,尽管您可以导入
from random import random而不是import random,因此您可以使用random()而不是random.random()以节省空间并增加可重复性。
标签: python python-3.x list random