首页 > 解决方案 > 使用列表推导从列表中随机删除一个元素

问题描述

我在使用列表理解随机删除元素时遇到问题。应根据概率随机删除每个单独的元素。所以这意味着,如果概率为 0.2,则仍然存在的平均元素数量为 80%。代码应该返回所有剩余的元素。

病毒是元素,mortabilityProb 是概率或随机因素。

def kill(viruses, mortalityProb):
    return "".join(["".join(random.sample(viruses, int(len(viruses[i])*(1-mortalityProb)))) for i in range(len(viruses))])

我试图更好地理解我做错了什么。要求是这应该通过列表理解来完成。

预先感谢您帮助我!

标签: python

解决方案


如何使用列表推导来“删除”元素(从技术上讲,您创建一个没有元素的新列表):

# general
[item for item in iterable if condition]

# example to get only the lowercase letters
[char for char in "aBcDeFhGi" if str.islower(char)]

# example filtering out based on probability
# random.random() returns a pseudo-random number between 0 and 1
import random
[item for item in iterable if random.random() > 0.8]

我假设你需要这样的东西:

def kill(viruses, mortalityProb):
    return [virus for virus in viruses if random.random() > mortalityProb]

推荐阅读