如何循环范围并随机随机播放Python中的列表?

时间:2018-02-28 22:51:28

标签: python python-3.x python-2.7 list

给定一个列表x = [1,0,0,1,1]我可以反复使用random.shuffle(x)来重新排列这个列表,但是如果我尝试这样做一个for循环列表不会随机播放。

例如:

x = [1,0,0,1,1]
k = []
for i in range(10):
     random.shuffle(x)
     k.append(x)
return x

基本上,k包含相同的x未洗脑序列?有什么工作吗?

3 个答案:

答案 0 :(得分:2)

如@jonrsharpe所述,random.shuffle会对列表进行操作。附加x时,您将附加对该特定对象的引用。因此,在循环结束时,k包含指向同一对象的十个指针!

要解决此问题,只需在每次迭代时创建列表的新副本,如下所示。这是通过在追加时调用list()来完成的。

import random
x = [1,0,0,1,1]
k = []
for i in range(10):
     random.shuffle(x)
     k.append(list(x))

答案 1 :(得分:2)

创建列表的新随机排序的一种pythonic方法根本不是随机播放。这是一个实现:

[random.sample(x, len(x)) for _ in range(10)]

<强>解释

  • random.sample创建一个新列表,而不是随机播放。
  • len(x)是样本的大小。在这种情况下,我们希望输出与原始列表长度相同的列表。
  • 列表推导通常被认为是pythonic而非显式for循环。

答案 2 :(得分:0)

试试这个:

x = [1,0,0,1,1]
k = []
for i in range(10):
     random.shuffle(x)
     k.append(x.copy())
return x

x替换为x.copy(),您会在k附加x的新列表,而不是x本身。