The random.choice
输入应该是sequence https://docs.python.org/3/glossary.html#term-iterable。这会导致奇怪的行为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
module.
有充分的理由吗random.choice(d)
不应该以明显的方式工作,返回随机密钥?
我考虑过random.choice(list(d))
and random.sample(d, 1)[0]
但希望有更有效的方法。能random.choice
在不降低序列当前行为的情况下进行改进?
你可以看到这个线程 http://bugs.python.org/issue15511132006 年的 Python bug 跟踪器上关于 random.choice 不适用于集合的问题。从算法上讲,可以使其以相同的渐近效率工作,但它需要 set/dict 数据结构的自定义支持,或者接口中的新方法。 python 开发人员认为不需要它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)