为什么random.shuffle会返回None?

为什么random.shuffle会返回None?

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


>>> x = ['foo','bar','black','sheep']

>>> from random import shuffle

>>> print shuffle(x)

None

如何获得洗牌值而不是None?


噜噜哒
浏览 2244回答 3
3回答

开满天机

random.shuffle()更改x列表到位。在原地改变结构的Python API方法通常返回None,而不是修改后的数据结构。如果您想基于现有列表创建一个新的随机混洗列表,其中现有列表按顺序保存,您可以使用random.sample()输入的全长:x = ['foo', 'bar', 'black', 'sheep']random.sample(x, len(x))     您还可以使用sorted()with random.random()作为排序键: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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python