给定一个列表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未洗脑序列?有什么工作吗?
答案 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)
是样本的大小。在这种情况下,我们希望输出与原始列表长度相同的列表。答案 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
本身。