sur*_*ing 1 python random shuffle
我有一个数字列表[1,2,3,4,5]。我想制作一个列表,其中包含[1,2,3,4,5]的不同排列(即,它将是列表的列表)。
例如,我想要类似[[1,4,5,3,2],[3,1,4,5,2],[5,1,2,4,3]]的内容。
import random
from random import shuffle
superlist = []
littlelist = [1,2,3,4,5]
for i in range(1, 4):
random.shuffle(little_list)
superlist.append(little_list)
print(superlist)
Run Code Online (Sandbox Code Playgroud)
这个输出
[[2, 5, 4, 3, 1], [2, 5, 4, 3, 1], [2, 5, 4, 3, 1]]
Run Code Online (Sandbox Code Playgroud)
因此,在我的for循环中,“随机洗牌”会产生相同的结果。我尝试花时间播种,但是存在相同的问题。
当您致电时random.shuffle,将列表拖到适当的位置,并不表示要进行复制。然后附加little_list到,superlist但是每次重新组合时,您都在重新组合相同的列表。
尝试附加副本,然后您会看到不同之处:
for i in range(1, 4):
random.shuffle(little_list)
superlist.append(list(little_list))
print(superlist)
Run Code Online (Sandbox Code Playgroud)
Python中的所有内容都可以通过处理对对象的引用来工作:当您将一个对象(例如little_list)放入另一个对象时,您所做的就是superlist保留对原始对象的引用little_list。Python永远不会复制对象,除非您明确要求它复制对象。您可以通过调用list(...)构造函数轻松地复制列表,但是即使仅复制原始列表中的引用,因此,如果要复制superlist和操作列表中包含的列表,您仍然会看到原始列表中的更改superlist。