返回

随机洗牌:在 Python 中打乱数组的妙招

前端

如何打乱一个数组?

洗牌:巧用 Python 的魔法

在 Python 中,洗牌数组的常用方法便是 shuffle 函数。shuffle 函数隶属于 random 模块,它能够随机地重新排列一个列表中的元素。让我们看个简单的例子:

import random

# 定义一个包含数字的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用 shuffle 函数打乱列表
random.shuffle(numbers)

# 打印打乱后的列表
print(numbers)

运行这段代码,你会发现 numbers 列表中的元素被随机地重新排列了。

深入探秘:Fisher-Yates 算法

Fisher-Yates 算法是另一种打乱数组的经典算法。它以高效和简单著称,广泛应用于计算机科学领域。算法的步骤如下:

  1. 从数组的最后一个元素开始,依次向前迭代。
  2. 对于每个元素,生成一个随机数 i,其中 0 ≤ i < 当前元素的索引。
  3. 将当前元素与索引 i 处的元素交换。

下面我们通过代码实现 Fisher-Yates 算法:

def fisher_yates_shuffle(array):
    for i in range(len(array) - 1, 0, -1):
        j = random.randint(0, i)
        array[i], array[j] = array[j], array[i]
    return array

# 定义一个包含数字的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用 Fisher-Yates 算法打乱列表
shuffled_numbers = fisher_yates_shuffle(numbers)

# 打印打乱后的列表
print(shuffled_numbers)

简约至上:random.sample() 函数

Python 还提供了一个内置函数 random.sample(),可以轻松地从一个列表中随机抽取指定数量的元素。如果想打乱一个数组,我们可以通过多次调用 random.sample() 函数来实现。

import random

# 定义一个包含数字的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用 random.sample() 函数打乱列表
shuffled_numbers = []
while numbers:
    element = random.sample(numbers, 1)
    shuffled_numbers.extend(element)
    numbers.remove(element[0])

# 打印打乱后的列表
print(shuffled_numbers)

结语

掌握了以上三种方法,你就可以轻松地在 Python 中打乱数组了。这些方法各有千秋,shuffle 函数简单易用,Fisher-Yates 算法高效可靠,random.sample() 函数则提供了更大的灵活性。根据你的具体需求,选择最适合你的方法吧!