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

Joe*_*oep 1 python python-3.x

我有一个n元素列表.现在我必须删除此列表中所有元素的百分比.删除的元素必须全部随机挑选.

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

n = 0.2
list = [one, two, three, four, five, six, seven, eight, nine, ten]
Run Code Online (Sandbox Code Playgroud)

随机删除20%后,列表将是:

list = [one, three, four, five, seven, eight, nine, ten] # two and seven deleted
Run Code Online (Sandbox Code Playgroud)

现在你可能会想,嗯,这不是那么难......嗯,这一切都必须在一条线上完成,我对那些oneliners来说是新手......

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

def remove(n, list):
    return list # But the new list with elements removed
Run Code Online (Sandbox Code Playgroud)

请帮忙,返回后面输入什么?

Jea*_*bre 6

你可以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))
Run Code Online (Sandbox Code Playgroud)

结果:

[10, 8, 4, 7, 1, 9, 6, 2]
Run Code Online (Sandbox Code Playgroud)

要注意浮动到整数舍入,你可以抛出一个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
Run Code Online (Sandbox Code Playgroud)

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