Python: 在 for 循环中洗牌每次都以相同的方式洗牌

Python: shuffle within a for loop shuffles the same way every time

我有一个数字列表 [1,2,3,4,5]。我想制作一个列表,其中包含 [1,2,3,4,5] 的不同排列(即它将是一个列表列表)。

例如,我想要类似的东西 [[1,4,5,3,2], [3,1,4,5,2],[5,1,2,4,3]].

import random
from random import shuffle

superlist = []
littlelist = [1,2,3,4,5]

for i in range(1, 4):
    random.shuffle(little_list)
    superlist.append(little_list)
print(superlist)

这输出

[[2, 5, 4, 3, 1], [2, 5, 4, 3, 1], [2, 5, 4, 3, 1]]

所以在我的 for 循环中,'random shuffle' 产生相同的结果。我试过时间播种,但也有同样的问题。

当您调用 random.shuffle 时,您只是在原地洗牌,而不是制作副本。然后你将 little_list 附加到 superlist 但每次你洗牌时你都在洗牌相同的列表。

尝试附加一个副本,然后您会看到不同之处:

for i in range(1, 4):
    random.shuffle(little_list)
    superlist.append(list(little_list))
print(superlist)

Python 中的所有内容都通过操纵对对象的引用来工作:当您将一个对象(例如 little_list)放入另一个对象时,您所做的就是使 superlist 持有对对象的引用原来little_list。 Python 除非您特别要求它复制对象,否则永远不会复制对象。您可以通过调用 list(...) 构造函数轻松复制列表,但即使这样也只会复制原始引​​用,因此如果您要复制 superlist 并操作它包含的列表,您仍然会看到这些更改回到原来的 superlist.