我有一个包含1500个元素的列表a_tot,我想以随机的方式将这个列表分成两个列表。列表a_1有1300个元素,列表a_2有200个元素。我的问题是如何用1500个元素随机化原始列表。当我把名单随机化后,我可以拿一片1300分,另一片200分。 一种方法是使用random.shuffle,另一种方法是使用random.sample。两种方法在随机化质量上有什么不同吗?列表1中的数据应为随机样本,列表2中的数据也应为随机样本。 有什么建议吗? 使用随机播放:
random.shuffle(a_tot) #get a randomized list
a_1 = a_tot[0:1300] #pick the first 1300
a_2 = a_tot[1300:] #pick the last 200
使用示例
new_t = random.sample(a_tot,len(a_tot)) #get a randomized list
a_1 = new_t[0:1300] #pick the first 1300
a_2 = new_t[1300:] #pick the last 200
在shuffle()和sample()之间有两个主要区别:
1)Shuffle将就地更改数据,因此其输入必须是可变序列。相反,sample生成一个新的列表,其输入可以有更多的变化(tuple、string、xrange、bytearray、set等)。
2)样本可以让你做更少的工作(即部分洗牌)。
有趣的是,通过演示可以根据sample()实现shuffle()来显示两者之间的概念关系:
反之亦然,根据shuffle实现sample():
在shuffle()和sample()的实际实现中,这两种方法都没有那么有效,但它确实显示了它们的概念关系。
洗牌的来源:
样品来源:
如您所见,在这两种情况下,随机化基本上是由
int(random() * n)
行完成的。因此,底层算法基本上是相同的。random.shuffle()
将给定的list
洗牌到位。它的长度不变。random.sample()
从给定序列中挑选n
项而不进行替换(也可以是元组或其他,只要它有一个__len__()
),并按随机顺序返回它们。相关问题 更多 >
编程相关推荐