在 Python 中随机化列表顺序

Beginner

This tutorial is from open-source community. Access the source code

简介

在 Python 中,列表是项目的有序集合。有时,我们可能希望随机化列表中项目的顺序。这对于游戏、模拟或任何其他我们希望引入随机元素的情况可能很有用。在这个挑战中,你将编写一个函数来打乱列表中的项目。

打乱列表

编写一个函数 shuffle(lst),它接受一个列表作为输入,并返回一个新列表,其中包含相同的元素,但顺序是随机的。你的函数应该使用 Fisher-Yates 算法来打乱列表中的元素。

Fisher-Yates 算法的工作原理如下:

  1. 从列表的最后一个元素开始。
  2. 在 0 到当前索引之间生成一个随机索引。
  3. 将当前索引处的元素与随机索引处的元素交换。
  4. 移动到列表中的下一个元素,并重复步骤 2 - 3,直到所有元素都被打乱。

你的函数不应修改原始列表。相反,它应该创建一个包含打乱后元素的新列表。

你可以假设输入列表将至少包含一个元素。

from copy import deepcopy
from random import randint

def shuffle(lst):
  temp_lst = deepcopy(lst)
  m = len(temp_lst)
  while (m):
    m -= 1
    i = randint(0, m)
    temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m]
  return temp_lst
foo = [1, 2, 3]
shuffle(foo) ## [2, 3, 1], foo = [1, 2, 3]

总结

在这个挑战中,你编写了一个使用 Fisher-Yates 算法打乱列表中元素顺序的函数。该算法是一种简单且高效的随机化列表中元素顺序的方法。通过完成这个挑战,你对 Python 中列表的工作原理以及如何使用函数来操作它们有了更深入的理解。