如果您有一个包含100个值的列表,您希望以2:1:1的比例将其子集化为3,那么在Python中执行此操作的最简单方法是什么?
我目前的解决方案是为每个子集取一个索引样本,然后从原始列表中删除这些值,即
my_list = [....]
num_A = 50
subset_A = []
num_B = 25
subset_B = []
num_C = 25
subset_C = []
a_indices = random.sample(xrange(len(my_list)), num_A)
for i in sorted(a_indices, reverse=True): # Otherwise can get index out of range
subset_A.append(my_list.pop(i))
b_indices = random.sample(xrange(len(my_list)), num_B)
for i in sorted(b_indices, reverse=True): # Otherwise can get index out of range
subset_B.append(my_list.pop(i))
subset_C = my_list[:]
assert len(subset_C) == num_C
但是,我确信这是一个比这更优雅的解决方案。
答案 0 :(得分:5)
这是一种更简单的方法。你可以随意洗牌并拿走零件。
xs = [...]
random.shuffle(xs)
print(xs[:50], xs[50:75], xs[75:])