我想要将名单洗牌6次,但我在所有6次中都获得了相同的结果。有人可以帮我找出故障的位置吗?
这是我使用的代码
import random
lis1=[0,1,2,3]
lis2=[]
for i in range(6):
random.shuffle(lis1)
lis2.append(lis1)
print lis2
这是我得到的样本结果
[[1,3,2,0],[1,3,2,0],[1,3,2,0],[1,3,2,0],[1,3,2,0],[1,3,2,0]]
如果我得到混乱的列表,我怎么能按升序排序?就像在,我想得到这个 -
[[0,1,2,3],[2,3,1,0],[2,1,3,0],[1,0,3,2]]
进入 -
[[0,1,2,3],[1,0,3,2],[2,1,3,0],[2,3,1,0]]
答案 0 :(得分:4)
首先,您的代码会重复向lis1
插入lis2
引用。由于lis1
始终保持不变,因此所有lis2
元素最终都指向同一个对象。要解决此问题,您需要更改append()
行,以便每次都复制列表:
lis2.append(lis1[:])
现在,要对结果进行排序,只需在循环后调用sort()
:
lis2.sort()
答案 1 :(得分:2)
尝试更简单的方法:
>>> first = [0,1,2,3]
>>> jumbled = [random.sample(first, len(first)) for i in range(6)]
>>> ordered = sorted(jumbled)
>>> jumbled
[[0, 3, 2, 1], [1, 0, 2, 3], [0, 2, 1, 3], [0, 1, 2, 3], [0, 2, 3, 1], [0, 3, 2, 1]]
>>> ordered
[[0, 1, 2, 3], [0, 2, 1, 3], [0, 2, 3, 1], [0, 3, 2, 1], [0, 3, 2, 1], [1, 0, 2, 3]]
答案 2 :(得分:2)
存储lis1
不是实际lis1
的副本
这样做:
lis2.append(lis1[:])
然后代码将是:
import random
lis1=[0,1,2,3]
lis2=[]
for i in range(6):
random.shuffle(lis1)
lis2.append(lis1[:])
print lis2
输出:
[[2, 3, 1, 0], [0, 3, 2, 1], [3, 0, 1, 2], [1, 2, 0, 3], [3, 0, 2, 1], [1, 0, 3, 2]]
答案 3 :(得分:0)
import random
lis1=[0,1,2,3]
lis2=[]
for i in range(6):
r = random.randint(0,len(lis1))
#print(r)
lis2.append(lis1[r:]+lis1[:r])
print(lis2)
print(sorted(lis2))