如何遍历范围并随机随机播放Python中的列表?

问题描述 投票:4回答:3

给定一个列表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

基本上,kcon与x unffffled相同的序列?有什么工作吗?

python python-3.x python-2.7 list
3个回答
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))

2
投票

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

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

说明

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

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本身。

© www.soinside.com 2019 - 2024. All rights reserved.