为了账号安全,请及时绑定邮箱和手机立即绑定

为什么random.shuffle会返回None?

为什么random.shuffle会返回None?

噜噜哒 2019-08-19 15:23:25
为什么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']


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 2243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信