Python-为什么random.shuffle返回None?

发布于 2021-02-02 23:10:56

为什么要用Python random.shuffle返回None

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

我如何获得改组后的值而不是None

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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']
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看