为什么random.shuffle不返回任何值?

2024-06-01 02:55:17 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么在Python中random.shuffle返回None

>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> print shuffle(x)
None

如何获取无序值而不是None


Tags: fromimportnonefoobarrandomblack无序
3条回答

这个方法也有效。

import random
shuffled = random.sample(original, len(original))

根据docs

Shuffle the sequence x in place. The optional argument random is a 0-argument function returning a random float in [0.0, 1.0); by default, this is the function random().

>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> shuffle(x)
>>> x
['bar', 'black', 'sheep', 'foo']

random.shuffle()更改x列表的位置。

就地更改结构的Python API方法通常返回None,而不是修改后的数据结构。

如果要创建一个基于现有列表的随机洗牌列表,其中现有列表保持顺序,则可以使用^{}输入的完整长度:

x = ['foo', 'bar', 'black', 'sheep']
random.sample(x, len(x))     

您还可以将^{}^{}一起用于排序键:

shuffled = sorted(x, key=lambda k: random.random())

但这会调用排序(O(NlogN)操作),而对输入长度的采样只需要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']

相关问题 更多 >