在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 = ...

问题很简单。我有一个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 = ... # 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
是数据还是索引。@OhadEytan
b=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]