【问题标题】:Shuffle giving same order [duplicate]随机播放相同的顺序[重复]
【发布时间】: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)]

标签: python random shuffle


【解决方案1】:

这不是洗牌,而是你定义列表的方式。

>>> test=[list(range(3))]*2
>>> test
[[0, 1, 2], [0, 1, 2]]
>>> test[0][0]=111
>>> test
[[111, 1, 2], [111, 1, 2]]

因此,实际上,您每次都在改组同一个列表,因为它们都引用同一个列表。

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多