我很好奇:Python如何从集合中实现random.choice()?
我可以想象一个非常慢的解决方案:在1和len(set)之间选择一个数字n,然后迭代n次并返回该项目。
答案 0 :(得分:4)
random.choice()
实际上不支持集合:
>>> import random
>>> s = {1, 2, 3, 4, 5}
>>> random.choice(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.4/random.py", line 256, in choice
return seq[i]
TypeError: 'set' object does not support indexing
但是,您可以将该集转换为列表:
>>> random.choice(list(s))
2
答案 1 :(得分:1)
设置不支持对象索引。所以你需要转换。 使用元组而不是列表对于实例化更有效:
s = set([1, 2, 3, 4, 5, 6])
print random.choice(tuple(s))
如果您正在寻找清晰度,另一种选择是使用样品。但是,它在内部的效率不如它转换的第一个例子。
s = set([1, 2, 3, 4, 5, 6])
print random.sample(s, 1)