random.choice
输入应该是 sequence .这会导致 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
此外,random.choice
在 set
和 collections
模块中的一些其他容器上根本不起作用。
为什么 random.choice(d)
不应该以明显的方式工作,返回一个随 secret 钥,这是有充分理由的吗?
我考虑过 random.choice(list(d))
和 random.sample(d, 1)[0]
但希望可能有更有效的方法。 random.choice
能否在不降低序列当前行为的情况下得到改进?
最佳答案
可以看到this thread关于 2006 年关于 random.choice 不适用于集合的 Python 错误跟踪器。在算法上可以使其以相同的渐近效率工作,但它需要来自 set/dict 数据结构的自定义支持,或者接口(interface)中的新方法。 python 开发人员认为不需要它。
关于python - random.choice 被字典破坏了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16431703/