Skip to main content
 首页 » 编程设计

python之随机删除列表中项目的百分比

2025年05月04日14rubylouvre

我有一个包含 n 个元素的列表。现在我必须删除此列表中所有元素的一定百分比。删除的元素必须全部随机选择。

例如设n = 0,2(要删除20%)

n = 0.2 
list = [one, two, three, four, five, six, seven, eight, nine, ten] 

随机去掉20%后,列表为:

list = [one, three, four, five, seven, eight, nine, ten] # two and seven deleted 

现在您可能会想,嗯,这并没有那么难...好吧,这一切都必须在一行中完成,而我对那些单行代码有点陌生...

因此必须创建一个新函数,它返回相同的列表但没有元素的百分比:

def remove(n, list): 
    return list # But the new list with elements removed 

请帮忙,回车后要输入什么?

请您参考如下方法:

您可以使用 random.sample 来选择 (100*(1-n))% 项:

import random 
 
def remove(l,n): 
    return random.sample(l,int(len(l)*(1-n))) 
 
print(remove(list(range(1,11)),0.2)) 

结果:

[10, 8, 4, 7, 1, 9, 6, 2] 

注意 float 到整数的舍入,您可以输入 int(len(l)*(1-n)+0.5) 以避免截断并取而代之。

编辑:另一种方法是 pop 在随机索引处计算的项目数(每次重新计算列表的 len 更简单,以避免索引超出边界):

def remove(l,n): 
    for _ in range(int(len(l)*n)): 
        l.pop(random.randrange(0,len(l))) 
    return l 

不是列表理解,不是单行,而是就地工作。当要删除的项目百分比较低时,可能会更快。