洗牌后附加到列表 (Python)

Append to list after shuffle (Python)

纽比问题: 我无法弄清楚为什么下面的代码不起作用。我正在尝试制作一个嵌套列表,其中 10 个嵌套列表中的每一个都有不同的顺序。我得到的是相同的列表以相同的顺序重复 10 次。

所以我想要: [[1, 2, 4, 3], [4, 2, 3, 1], [2, 4, 3, 1]]

但我得到: [[2, 3, 1, 4], [2, 3, 1, 4], [2, 3, 1, 4]]

<pre>from random import shuffle

myList = ["file1", "file2", "file3", "file4"]
longList = []

for x in range(0,10):
    shuffle(myList)
    longList.append(myList)

print(longList)<code>

提前致谢!

D

Shuffle 就地运行,返回 None。 奇怪的是它在 10 次尝试中返回相同的列表。可能您这样做的次数不够多,因此请将 returns 相同的结果随机播放几次。尝试多次测试。 也许做:

random.seed(x)

循环内部。

这是因为longList里面的对象引用都是对对象myList的引用。

正如上面, random.shuffle changes myList in place, so each time you call random.shuffle所解释的那样,它覆盖了它的内容。

一个解决方案是在每次打乱列表时克隆列表,有几种方法可以做到这一点 (How to clone a list in Python)。

在下面的代码中我选择切片:

from random import shuffle

myList = ["file1", "file2", "file3", "file4"]
longList = []

for x in range(0,10):
    shuffle(myList)
    longList.append(myList[:])