Python样本没有替换和更改人口

时间:2014-10-15 10:08:23

标签: 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

但是,我确信这是一个比这更优雅的解决方案。

1 个答案:

答案 0 :(得分:5)

这是一种更简单的方法。你可以随意洗牌并拿走零件。

xs = [...]
random.shuffle(xs)
print(xs[:50], xs[50:75], xs[75:])