我有一个列表,我想随机分成两个已知大小的子列表,它们是彼此的补充。例如,我有[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>
我错过了一些内置的随机选项吗?任何人都可以提供简单的解决方案吗?
答案 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)