Python如何从集合中实现random.choice()?

时间:2016-02-28 09:44:13

标签: python algorithm

我很好奇:Python如何从集合中实现random.choice()?

我可以想象一个非常慢的解决方案:在1和len(set)之间选择一个数字n,然后迭代n次并返回该项目。

2 个答案:

答案 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)

REF: Are tuples more efficient than lists in Python?