如何在Python中洗牌对象列表?
在本文中,我们将向您展示如何在Python中洗牌对象列表。以下是实现此任务的各种方法:
- 使用random.shuffle()函数
-
使用random.sample()函数
-
使用Fisher-Yates洗牌算法
-
使用random.randint()和pop()函数
假设我们有一个包含某些元素的列表。我们将使用上述不同的方法随机洗牌列表的元素。
阅读更多:Python 教程
使用random.shuffle()函数
random模块中的shuffle()方法用于洗牌列表。它接受一个序列,例如列表,并重新组织项目的顺序。
此shuffle()方法更改原始列表,不会返回新列表。此过程中失去了列表的顺序,这是此方法的唯一缺点。
语法
参数
- 序列 - 任何序列,如列表、元组等。
-
function(可选) - 返回0.0到1.0之间的值的函数名称。如果未指定,将使用random()函数。
算法(步骤)
执行所需任务的算法/步骤如下:
- 使用import关键字导入random模块。
-
创建一个变量以存储输入列表。
-
打印输入列表。
-
使用random.shuffle()函数通过将列表作为参数传递来随机洗牌所有列表元素。
-
打印结果随机洗牌的列表。
示例
以下程序使用random.shuffle()函数返回洗牌列表:
输出
在执行上述程序时,将生成以下输出-
使用random.sample()函数
python中的random.sample()方法返回一个新的洗牌列表。原始列表保持不变。
random.sample()方法返回一个包含从序列中随机选择的元素数量的列表。
语法
参数
- 序列 - 任何序列,如列表、元组等。
-
k - 返回的元素数量
算法(步骤)
执行所需任务的算法/步骤如下:
- 使用import关键字导入 random 模块。
-
使用 random.sample() 函数通过传递输入列表和使用len()函数(len()方法返回对象中的项目数)作为参数以随机方式混洗所有列表元素的长度来随机混洗所有列表元素。
-
打印结果混洗列表。
示例
以下程序使用random.shuffle()函数返回混洗列表-
输出
在执行上述程序时,将生成以下输出-
使用Fisher-Yates shuffle算法
这是一种在Python中使用的著名算法,用于混洗数字序列。
Fisher-Yates shuffle算法
Fisher-Yates shuffle算法的时间复杂度为O(n)。假设我们给出了函数rand(),它以O(1)时间生成一个随机数字。其思想是从最后一个元素开始,并将其与整个数组中(包括最后一个元素)的随机选择元素交换。考虑从0到n-2的数组(大小减少了一个)并重复该过程,直到到达第一个元素为止。
算法(步骤)
以下是要执行所需任务的算法/步骤–。
- 使用for循环遍历列表的末尾,使用 len()函数 (返回对象中的项目数)。
-
使用random. randint() 方法获取当前索引值的随机索引(返回指定范围内的随机数)。
-
将当前索引元素与随机索引处的元素交换。
-
打印结果混洗列表。
示例
以下程序使用Fisher-Yates shuffle算法返回混洗列表-
输出
执行上述程序后会生成以下输出 –
使用 random.randint() 和 pop() 函数
random.randint() − 返回指定范围内的随机数。
例子
以下程序使用 random.randint() 和 pop() 函数返回洗牌列表 –
输出
执行上述程序后会生成以下输出 –
结论
在本文中,我们学习了四种不同的 Python 方法来洗牌给定列表。我们还学习了 Fisher-Yates 算法生成的洗牌列表以及如何在 Python 中使用它。