为什么random.shuffle会返回None?为什么要在Python中random.shuffle返回None?>>> x = ['foo','bar','black','sheep']>>> from random import shuffle>>> print shuffle(x)None如何获得洗牌值而不是None?
3 回答
开满天机
TA贡献1786条经验 获得超13个赞
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']
添加回答
举报
0/150
提交
取消