给定一个列表x = [1,0,0,1,1]
I可以反复使用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
con与x unffffled相同的序列?有什么工作吗?
正如@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))
创建列表的新随机排序的一种pythonic方法根本不是随机播放。这是一个实现:
[random.sample(x, len(x)) for _ in range(10)]
说明
random.sample
创建了一个新的列表,而不是改组。len(x)
是样本的大小。在这种情况下,我们希望输出与原始列表长度相同的列表。试试这个:
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
本身。