繁体   English   中英

Python列表不会循环播放

[英]Python list does not shuffle in a loop

我试图通过迭代创建一个随机的键列表:

import random

keys = ['1', '2', '3', '4', '5']
random.shuffle(keys)
print keys

这很完美。 但是,如果我把它放在循环中并捕获输出:

a = []
for x in range(10):
    random.shuffle(keys)
    a.append(keys)

我得到10次同样的洗牌?! 显然这里有些根本错误......提前谢谢。

of the list to the combined list. 问题是您正在对列表进行洗牌,然后将列表的添加到组合列表中。 因此,您最终会使用相同的列表结构10次。 “基本变化”是必须在附加之前复制列表。

这里有一个更加“pythonic”的方式来实现与列表理解相同的结果。

import random

def shuffleACopy(x):
        b = x[:] # make a copy of the keys
        random.shuffle(b) # shuffle the copy
        return b # return the copy

keys = [1,2,3,4,5,6,7,8]
a = [shuffleACopy(keys) for x in range(10)]
print(a)

Hypnos已经回答了一个非常正确的解决方案,所以我只是给你一个更直观的方式来了解发生了什么以及如何在未来发现这些事情:

import random
keys = ['1', '2', '3', '4', '5']
a = []
for x in range(10):
    random.shuffle(keys)
    a.append(keys)
    print a

得到:

[['4', '5', '3', '2', '1']]
[['2', '5', '1', '4', '3'], ['2', '5', '1', '4', '3']]
[['2', '5', '4', '1', '3'], ['2', '5', '4', '1', '3'], ['2', '5', '4', '1', '3']]
[['5', '4', '3', '1', '2'], ['5', '4', '3', '1', '2'], ['5', '4', '3', '1', '2'], ['5', '4', '3', '1', '2']]
[['1', '4', '3', '2', '5'], ['1', '4', '3', '2', '5'], ['1', '4', '3', '2', '5'], ['1', '4', '3', '2', '5'], ['1', '4', '3', '2', '5']]
[['2', '3', '4', '1', '5'], ['2', '3', '4', '1', '5'], ['2', '3', '4', '1', '5'], ['2', '3', '4', '1', '5'], ['2', '3', '4', '1', '5'], ['2', '3', '4', '1', '5']]
[['2', '1', '4', '5', '3'], ['2', '1', '4', '5', '3'], ['2', '1', '4', '5', '3'], ['2', '1', '4', '5', '3'], ['2', '1', '4', '5', '3'], ['2', '1', '4', '5', '3'], ['2', '1', '4', '5', '3']]
[['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1'], ['2', '5', '3', '4', '1']]
[['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1'], ['3', '5', '2', '4', '1']]
[['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1'], ['4', '2', '3', '5', '1']]

另外,注意到, random.shuffle不返回任何东西,你就可以开始怀疑该变换到位完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM