shuffle 后追加到列表(Python)

use*_*285 1 python shuffle append

Newby 问题:我无法弄清楚为什么下面的代码不起作用。我正在尝试制作一个嵌套列表,其中 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>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

D

Pie*_*ier 5

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

正如这里所解释的,random.shuffle 会发生变化myList,所以每次你调用random.shuffle时,它都会覆盖它的内容。

解决方案可以是每次洗牌时克隆列表,并且有几种方法可用(如何在 Python 中克隆列表)。

在以下代码中,我选择对其进行切片:

from random import shuffle

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

for x in range(0,10):
    shuffle(myList)
    longList.append(myList[:])
Run Code Online (Sandbox Code Playgroud)