为什么要用Pythonrandom.shuffle返回None?
random.shuffle
None
>>> x = ['foo','bar','black','sheep'] >>> from random import shuffle >>> print shuffle(x) None
我如何获得改组后的值而不是None?
random.shuffle()更改x列表 到位 。
random.shuffle()
x
在原位更改结构的Python API方法通常返回None,而不是修改后的数据结构。
如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用random.sample()输入的完整长度:
random.sample()
x = ['foo', 'bar', 'black', 'sheep'] random.sample(x, len(x))
您还可以将sorted()withrandom.random()用于排序键:
sorted()
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']