Stu*_*acy 0 python random sample
如果你有一个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
Run Code Online (Sandbox Code Playgroud)
但是我确信有比这更优雅的解决方案.
有一个更简单的方法.你可以随意洗牌并拿走零件.
xs = [...]
random.shuffle(xs)
print(xs[:50], xs[50:75], xs[75:])
Run Code Online (Sandbox Code Playgroud)