python - 为什么 random.shuffle 返回 None?

标签 python list random shuffle

为什么 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/

相关文章:

python:删除 Pandas 数据框中包含字符串的所有行

Python - 根据列表字典中的出现对列表中的项目进行分类

java - 扩展 ArrayList 并使用/创建类似的构造函数

c++ - 列表中 double 和 float 对象的大小是否相等?

python - Python 3.6 SequenceMatcher().get_matching_blocks() 如何工作?

python - 在 python 中以非标准表示法表达 float ?

Python与SSL——违反协议(protocol)发生EOF

javascript - HTML 中的随机视频生成器

python - 从 python 列表中选择一个随机单词?

bash - 从 stdout 中随机选择一行