random.choice
输入必须是一个序列是有限制的。这会在 a 上导致不明显和多毛的行为dict
:
>>> d = {0: 'spam', 1: 'eggs', 3: 'potato'}
>>> random.choice(d)
'spam'
>>> random.choice(d)
'eggs'
>>> random.choice(d)
'spam'
>>> random.choice(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/random.py", line 274, in choice
return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty
KeyError: 2
此外,它在 a 和模块中 的set
其他一些容器上根本不起作用。collections
除了我认为random.choice
is balls 的这种实现(没有充分理由不random.choice(d)
应该以明显的方式工作)之外,从非序列集合中获取随机选择的 Python 方法是什么?
我考虑过random.choice(list(d))
,random.sample(d, 1)[0]
但希望可能有其他不那么丑陋的方法。
可以random.choice
在不破坏或大幅降低序列当前行为的效率的情况下进行猴子修补以“正常工作”吗?