如何从列表中随机删除一定百分比的项目

Ric*_*all 0 python list

我有两个相等长度的列表,一个是数据系列,另一个是时间序列.它们代表随时间测量的模拟值.

我想创建一个函数,从两个列表中随机删除一个设定的百分比或分数.即如果我的分数是0.2,我想从两个列表中随机删除20%的项目,但它们必须是相同的项目(每个列表中的相同索引)被删除.

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

a = [0,1,2,3,4,5,6,7,8,9]
b = [0,1,4,9,16,25,36,49,64,81]
Run Code Online (Sandbox Code Playgroud)

随机删除20%后,它们就变成了

a_new = [0,1,3,4,5,6,8,9]
b_new = [0,1,9,16,25,36,64,81]
Run Code Online (Sandbox Code Playgroud)

这种关系并不像示例那么简单,所以我不能只在一个列表上执行此操作,然后计算出第二个; 它们已经存在为两个列表.他们必须保持原始秩序.

谢谢!

ins*_*get 7

import random

a = [0,1,2,3,4,5,6,7,8,9]
b = [0,1,4,9,16,25,36,49,64,81]

frac = 0.2  # how much of a/b do you want to exclude

# generate a list of indices to exclude. Turn in into a set for O(1) lookup time
inds = set(random.sample(list(range(len(a))), int(frac*len(a))))

# use `enumerate` to get list indices as well as elements. 
# Filter by index, but take only the elements
new_a = [n for i,n in enumerate(a) if i not in inds]
new_b = [n for i,n in enumerate(b) if i not in inds]
Run Code Online (Sandbox Code Playgroud)