Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表洗牌6次?_Python_List_Random Sample - Fatal编程技术网

Python 如何将列表洗牌6次?

Python 如何将列表洗牌6次?,python,list,random-sample,Python,List,Random Sample,我想洗牌一张名单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]] 如果我得到了混乱

我想洗牌一张名单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]]
尝试更简单的方法:

>>> 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]]
尝试更简单的方法:

>>> 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]]

存储
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]]

存储
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]]

首先,您的代码反复将
lis1
引用插入
lis2
。由于
lis1
始终保持不变,因此所有
lis2
元素最终都指向同一对象。要解决此问题,您需要更改
append()
行,以便每次复制列表:

lis2.append(lis1[:])
现在,要对结果进行排序,只需在循环后调用
sort()

lis2.sort()

首先,您的代码反复将
lis1
引用插入
lis2
。由于
lis1
始终保持不变,因此所有
lis2
元素最终都指向同一对象。要解决此问题,您需要更改
append()
行,以便每次复制列表:

lis2.append(lis1[:])
现在,要对结果进行排序,只需在循环后调用
sort()

lis2.sort()

您正在对同一列表进行6次洗牌和追加操作。请参阅可能的重复(请参阅答案,
*
语法不同,但结果/问题相同)您正在对同一列表进行6次洗牌和追加操作。请参阅可能的重复(请参阅答案,
*
语法不同,但结果/问题相同)这只能产生一小部分排列。是的,我同意它会旋转列表,而不是洗牌。我在发帖时没有注意到这一点。谢谢你提到这只能产生一小部分排列。是的,我同意它会轮换列表而不是洗牌。我在发帖时没有注意到这一点。谢谢你的提醒