将列表随机划分为两个互补的子列表

时间:2014-06-30 18:32:49

标签: python list python-2.7 random

我有一个列表,我想随机分成两个已知大小的子列表,它们是彼此的补充。例如,我有[1,5,6,8,9],我想将其分为[1,5,9][6,8]。我不太关心效率,只是想让它发挥作用。订单无关紧要。

我开始时:

pop = [...] #some input
samp1 = random.sample(pop, samp1len)
samp2 = [x for x in pop if x not in samp1]

但是,此解决方案因重复项而失败。如果pop = [0,0,0,3,5],并且长度为3的第一个选择为[0,3,5],我仍然希望samp2为[0,0],我的代码目前无法提供。{/ p>

我错过了一些内置的随机选项吗?任何人都可以提供简单的解决方案吗?

1 个答案:

答案 0 :(得分:4)

这样的事情怎么样?

生成索引列表并将其随机播放:

>>> indices = range(len(pop))
>>> random.shuffle(indices)

然后切片索引列表并使用operator.itemegetter获取项目:

>>> from operator import itemgetter
>>> itemgetter(*indices[:3])(pop)
(0, 0, 3)
>>> itemgetter(*indices[3:])(pop)
(5, 0)