python random.shuffle()方法,及第二个参数详解

random.shuffle()方法

random.shuffle()是一个非常有趣的方法(个人觉得),可以将有序的python序列的顺序打乱,这不禁就让人想起随机可重复抽取样本的抽样统计学方法,而统计学结合python是干嘛的呢,是的,基本上就是机器学习方向的了,包括人工智能。random.shuffle()是python模块random的方法之一。语法如下:


shuffle()语法

random.shuffle( x, random=None)

语法源代码如下:

shuffle(x, random=None) method of random.Random instance
    Shuffle list x in place, and return None.
    
    Optional argument random is a 0-argument function returning a
    random float in [0.0, 1.0); if it is the default None, the
    standard random.random will be used.

参数解析表:

参数描述
xpython中有序的序列,比如list、tuple等,集合是无序的,所以集合set不能作为参数传递给random.shuffle();
第二个参数random一个带有返回值的函数,默认为None,根据语法中的解释,默认为None时将采用random.random()方法的返回值,该返回值介于[0.0, 1.0)之间。也可以是自定义的函数,返回值介于[0.0,1.0)之间。那么这个参数到底有什么用呢?具体可见下方实例代码及相关解析内容中的解释。

shuffle()实例代码

>>> import random
>>> list1 = list(range(9))
>>> list1
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> random.shuffle(list1) #默认情况下,shuffle()的第二个参数为random.random()
>>> list1
[2, 0, 1, 3, 7, 5, 6, 8, 4]
>>> random.shuffle(list1) #为什么要shuffle(list1)这么多遍,注意list1列表的元素顺序被打乱的规律
>>> list1
[0, 6, 3, 1, 2, 7, 4, 5, 8]
>>> random.shuffle(list1)
>>> list1
[5, 7, 8, 3, 4, 2, 0, 6, 1]
>>> list2 = list(range(9))
>>> list2
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> def func():
...     return 0.1
... 
>>> random.shuffle(list2,func) #shuffle()的第二个参数为自定义的函数,返回值为0.1
>>> list2
[1, 2, 3, 4, 5, 6, 7, 8, 0]
>>> random.shuffle(list2,func) #注意shuffle()打乱列表list2的顺序的规律,非常明显,仿佛有顺序
>>> list2
[2, 3, 4, 5, 6, 7, 8, 0, 1]
>>> random.shuffle(list2,func)
>>> list2
[3, 4, 5, 6, 7, 8, 0, 1, 2]
>>> random.shuffle({1,2}) #集合set是无序的,无法作为参数传递给random.shuffle()方法
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/anaconda3/lib/python3.7/random.py", line 278, in shuffle
    x[i], x[j] = x[j], x[i]
TypeError: 'set' object is not subscriptable

实例代码解析

1、如上代码,前三次调用random.shuffle()方式时都不传递第二个参数,这种情况下,random.shuffle()的第二个参数默认为random.random(),其返回值是随机的,几乎每一次都不一样,如此参数条件下,list1被打乱的顺序也是随机的,几乎无规律可寻;2、后三次调用random.shuffle()方法是传递的第二个参数为一个返回值为0.1的函数,即这三次每一次的返回值都是相同的,如此,list2顺序被打乱的就显得有规律了——把第一个元素调到最后一个,然后后面的向前推进一位。



全栈后端 / Python库 :









Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.