为什么 random.shuffle
在 Python 中返回 None
?
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> print shuffle(x)
None
如何获得洗牌后的值而不是 None
?
最佳答案
random.shuffle()
更改 x
列表就地。
就地改变结构的 Python API 方法通常返回 None
,而不是修改后的数据结构。
>>> x = ['foo', 'bar', 'black', 'sheep']
>>> random.shuffle(x)
>>> x
['black', 'bar', 'sheep', 'foo']
如果您想在现有列表的基础上创建一个新随机打乱列表,其中现有列表保持有序,您可以使用 random.sample()
输入的全长:
random.sample(x, len(x))
您也可以使用 sorted()
与 random.random()
对于排序键:
shuffled = sorted(x, key=lambda k: random.random())
但这会调用排序(O(N log N) 操作),而对输入长度的采样只需要 O(N) 操作(使用与 random.shuffle()
相同的过程,从缩小的池中换出随机值)。
演示:
>>> import random
>>> x = ['foo', 'bar', 'black', 'sheep']
>>> random.sample(x, len(x))
['bar', 'sheep', 'black', 'foo']
>>> sorted(x, key=lambda k: random.random())
['sheep', 'foo', 'black', 'bar']
>>> x
['foo', 'bar', 'black', 'sheep']
关于python - 为什么 random.shuffle 返回 None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17649875/