问题很简单。我有一个说10个条目的列表,我正在运行循环。我想要的是每个条目只需一次,但是按随机顺序。
最好和最pythonic的方法是什么?
答案 0 :(得分:5)
您可以使用random.sample
,它会返回防止重复的随机元素:
>>> import random
>>> data = range(10)
>>> print(random.sample(data, len(data)))
[2, 4, 8, 7, 0, 5, 6, 3, 1, 9]
原始列表保持不变。
答案 1 :(得分:4)
您可以使用random.shuffle
:
In [1]: import random
In [3]: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [4]: random.shuffle(a)
In [5]: a
Out[5]: [3, 6, 9, 1, 8, 0, 4, 7, 5, 2]
答案 2 :(得分:0)
首先导入random
模块并使用shuffle
功能随机播放列表:
import random
x = ... # A list
random.shuffle(x)
然后遍历您的列表。请注意,shuffle
会改变原始列表,并且不会返回随机版本。
答案 3 :(得分:0)
您可以使用random.shuffle()
:
import random
original = range(10)
# Make a copy of the original list, as shuffling will be in-place
shuffled = list(original)
random.shuffle(shuffled)
Jean-FrançoisFabre的有效评论:如果您使用original
变量并将其直接传递给random.shuffle
,Python会返回错误,并将'range' object does not support item assignment
作为{{} 1}}返回一个生成器。
要解决此问题,只需将作业替换为range
。
答案 4 :(得分:0)
你可以使用shuffle:
import random
random.shuffle(yourlist)
# loop as you would normally
for item in yourlist:
.....
答案 5 :(得分:-2)
import random
s=set(range(10))
while len(s)>0:
s.remove(random.choice(yourlist(s)))
print(s)