Skip to main content
 首页 » 编程设计

python之洗牌后 append 到列表(Python)

2025年05月04日34daizhj

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

请您参考如下方法:

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

如解释here , random.shuffle就地更改 myList,所以每次调用 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[:])