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]]
1 2 3 4 5 6 7 8 9 10 | [cc lang="python"]from random import shuffle myList = ["file1","file2","file3","file4"] longList = [] for x in range(0,10): shuffle(myList) longList.append(myList) print(longList)<wyn> |
事先谢谢!
D
这是因为
正如这里所解释的,random.shuffle会在适当的位置更改cx1(1),因此每次调用random.shuffle时,它都会覆盖其内容。
一个解决方案是,每次随机播放列表时都要克隆它,并且有几种方法可用于克隆列表(如何在python中克隆列表)。
在下面的代码中,我选择对其进行切片:
1 2 3 4 5 6 7 8 | from random import shuffle myList = ["file1","file2","file3","file4"] longList = [] for x in range(0,10): shuffle(myList) longList.append(myList[:]) |
号
shuffle就地工作,不返回。奇怪的是,它会在10次尝试中返回相同的列表。很可能你做的次数不够,所以shuffle会在一个原始文件中返回相同的结果几次。试着测试很多次。也许可以:
1 | random.seed(x) |
在循环中。