在python中,如何从列表中随机选择条目
问题很简单。我有一个10个条目的列表,我在上面运行一个循环。我想在这里得到的是每一个条目只需要一次,但顺序是随机的 做这件事的最佳和最具python风格的方法是什么?您可以使用:在python中,如何从列表中随机选择条目,python,list,Python,List,问题很简单。我有一个10个条目的列表,我在上面运行一个循环。我想在这里得到的是每一个条目只需要一次,但顺序是随机的 做这件事的最佳和最具python风格的方法是什么?您可以使用: import random s=set(range(10)) while len(s)>0: s.remove(random.choice(yourlist(s))) print(s) 通过导入random模块并使用Shuffle功能,首先对列表进行洗牌: import random x = ...
import random
s=set(range(10))
while len(s)>0:
s.remove(random.choice(yourlist(s)))
print(s)
通过导入
random
模块并使用Shuffle
功能,首先对列表进行洗牌:
import random
x = ... # A list
random.shuffle(x)
然后循环你的清单。请注意,shuffle
会对原始列表进行变异,并且不会返回已洗牌的版本 您可以使用:
Jean-François Fabre的有效评论:如果使用
原始
变量并将其直接传递给random.shuffle
,Python将返回一个错误,说明'range'对象不支持项赋值
,因为range
返回一个生成器
要解决此问题,只需将赋值替换为列表(范围(10))
您可以使用shuffle:
import random
random.shuffle(yourlist)
# loop as you would normally
for item in yourlist:
.....
您可以使用,它返回防止重复的随机元素:
>>> import random
>>> data = range(10)
>>> print(random.sample(data, len(data)))
[2, 4, 8, 7, 0, 5, 6, 3, 1, 9]
原始列表保持不变。
random.shuffle()
这可能会返回重复的项目。你说得对,我需要使用一个集合。没有测试代码..fixing.set不支持选择
。向上投票的问题和这个问题有什么区别(除了向下投票和关于就地事件的额外提示),不过建议很小:在Python3中,您需要将range转换为list,因为range是一个生成器(这是使用range的特殊情况),非常感谢。我已经更新了我的答案以包含您的评论。不适用于python 3,因为range
是一个迭代器。除此之外,很好。@Jean-Françoisfare感谢您的评论!更正。很好的便携式更正方法:)我只是告诉你,这样你就不会从神秘的投票人那里得到反对票,因为它不起作用!无论如何,洗牌范围可能是一种操作情况。请解释a
是数据还是索引。@OhadEytanb=a[:]
,现在在b
上执行它。小的输入错误:数据之后的)
应该在语句的末尾。我花了一点时间才意识到示例
和洗牌
之间的本质区别,但您在结尾的评论清楚地说明了这一点。
import random
random.shuffle(yourlist)
# loop as you would normally
for item in yourlist:
.....
>>> import random
>>> data = range(10)
>>> print(random.sample(data, len(data)))
[2, 4, 8, 7, 0, 5, 6, 3, 1, 9]