如何随机选择非零元素并用0代替?



存在一个列表(A = [0, 1, 2, 3, 4, 5, 0, 6, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0]),要求列表中非零元素的最大个数为5。

如何随机选择非零元素并将其替换为0,并保持列表中只有5个非零元素?

一种方法是,如果非零元素的下标大于5,则不替换其下标进行抽样,如下所示:

import random
A = [0, 1, 2, 3, 4, 5, 0, 6, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0]
non_zero = [i for i, ai in enumerate(A) if ai]
len_non_zero = len(non_zero)
sample = random.sample(non_zero, k=(len_non_zero - 5 if  len_non_zero > 5 else len_non_zero))
res = [ai for i, ai in enumerate(A) if i not in sample]
print(res)

[0, 1, 2, 3, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0]

您可以生成一个随机顺序来'遍历' a,然后这样做,将前5个非零数字复制到一个新列表:

import random
A = [0, 1, 2, 3, 4, 5, 0, 6, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0]
lenA = len(A)
B = [0] * lenA
count = 5
for i in random.sample(range(0, lenA), lenA):
if count and A[i] != 0:
B(i) = A[i]
count = count - 1
print(B)

最新更新