【发布时间】:2020-01-23 21:49:50
【问题描述】:
当我洗牌几个子列表时,它们以相同的顺序出现。我确信我每次都可以用一个随机数重新播种,但我读到的所有内容都暗示我不应该这样做。
代码:
test=[list(range(10))]*5
import random
for x in test:
random.shuffle(x)
print(test)
结果:
[[0, 8, 9, 6, 1, 2, 7, 4, 5, 3], [0, 8, 9, 6, 1, 2, 7, 4, 5, 3], [0, 8, 9, 6, 1, 2, 7, 4, 5, 3], [0, 8, 9, 6, 1, 2, 7, 4, 5, 3], [0, 8, 9, 6, 1, 2, 7, 4, 5, 3]]
为什么 shuffle 不会产生不同的订单?
【问题讨论】:
-
是的,我自己刚刚意识到这一点。肯定是这样的。
-
当你这样做时:
test=[list(range(10))]*5你正在创建 5 个对 same 列表的引用 - 上面由@Peter 链接的骗子很好地解释了这一点 -
我可能会做你正在做的事情去定义候选空间 - 例如:
r = range(10)(方便,因为它可以即时计算并且不会真正占用空间并且可以被重复使用),然后建立类似:test = [random.sample(r, len(r)) for _ in range(5)]