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

标签 python append shuffle

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

关于python - 洗牌后 append 到列表(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35904285/

相关文章:

javascript - 在 jQuery 切片后重新 append 列表项并删除

c++ - std::shuffle 的使用和效用?

python - 为什么改组列表(范围(n))比改组[0] * n慢?

python - Word2Vec min_count 是如何应用的

python - 将keras后端从tensorflow cpu更改为gpu

java - 行尾,FileWriter\n

linux - 如何使用 Red Hat Linux 上的标准工具随机化文件中的行?

python - Julia 中的 Pyplot Labelposition Y 轴

java - kademila end emule 库

python - 在方法中扩展或追加字符串