Aléatoriser l'ordre d'une liste en Python

PythonPythonBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

En Python, une liste est une collection ordonnée d'éléments. Parfois, nous pouvons vouloir aléatoriser l'ordre des éléments d'une liste. Cela peut être utile pour les jeux, les simulations ou toute autre situation où nous voulons introduire un élément de hasard. Dans ce défi, vous écrirez une fonction qui mélange les éléments d'une liste.

Mélanger une liste

Écrivez une fonction shuffle(lst) qui prend une liste en entrée et renvoie une nouvelle liste avec les mêmes éléments dans un ordre aléatoire. Votre fonction devrait utiliser l'algorithme de Fisher-Yates pour mélanger les éléments de la liste.

L'algorithme de Fisher-Yates fonctionne comme suit :

  1. Commencez par le dernier élément de la liste.
  2. Générez un index aléatoire entre 0 et l'index actuel.
  3. Échangez l'élément à l'index actuel avec l'élément à l'index aléatoire.
  4. Passez à l'élément suivant de la liste et répétez les étapes 2-3 jusqu'à ce que tous les éléments aient été mélangés.

Votre fonction ne devrait pas modifier la liste d'origine. Au lieu de cela, elle devrait créer une nouvelle liste avec les éléments mélangés.

Vous pouvez supposer que la liste d'entrée contiendra au moins un élément.

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]

Sommaire

Dans ce défi, vous avez écrit une fonction qui mélange les éléments d'une liste en utilisant l'algorithme de Fisher-Yates. Cet algorithme est un moyen simple et efficace d'aléatoriser l'ordre des éléments d'une liste. En complétant ce défi, vous avez acquis une compréhension plus approfondie de la manière dont les listes fonctionnent en Python et de la manière de les manipuler à l'aide de fonctions.