Python, les listes, le hasard

Aujourd’hui, on fait du pseudo-aléatoire. Python est un langage de script très pratique lorsqu’on doit manipuler des listes (tableaux), ou des dictionnaires (tables de hachage). Voyons comment en très peu de code, on peut lier les listes avec le module random.

Imaginons que je veuille choisir un ou plusieurs éléments au hasard dans une liste d’éléments. Je connais quelques bases du module random,  je vais donc avoir envie de procéder comme suit :

import random

ma_liste = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

# Obtenir un élément au hasard
i = random.randint(0, len(ma_liste) - 1)
elem = ma_liste[i]

# Obtenir un ensemble d'élements au hasard
nb_elem = 6
indices = []
while nb_elem > 0:
    i = random.randint(0, len(ma_liste) -1)
    while i in indices: # tant que le tirage redonne un nombre déjà choisi
        i = random.randint(0, len(ma_liste) -1)
    indices.append(i)
    nb_elem = nb_elem - 1
resultat = []
for index in indices:
    resultat.append(ma_liste[index])

Pas très élégant, n’est ce pas? Heureusement, random nous offre aussi des fonctions sur les listes. Ça devrait donc plutôt donner ça :

import random

ma_liste = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

# Obtenir un élément au hasard
un_element = random.choice(ma_liste)

# Obtenir échantillon de 6 éléments
echantillon = random.sample(ma_liste, 6)

Beaucoup mieux!

En bonus, si vous souhaitez mélanger les éléments d’une liste, pour la parcourir dans un ordre différent (et aléatoire) de l’ordre de sa construction, procédez ainsi :

import random
ma_liste = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
random.shuffle(ma_liste)
# Attention, la liste sera modifiée "sur place"

Source : la documentation officielle de python concernant le module random.

Vous aimerez aussi...

5 réponses

  1. Steakhachai dit :

    Voilà, la force de Python: pouvoir faire des choses élégantes en peu de lignes.

  2. Critidos dit :

    Avec Perl, on peut aussi faire peu de lignes mais c’est dégueulasse…

    (on voit le troll contre Perl là ou pas ?)

    Billet intéressant. J’avais débuté le Python au lycée (pour le fun :/) et n’ai jamais approfondi.
    Me donne envie de recommencer !

  3. olivier dit :

    Critidos> j’utilise parfois le python pour me faire des utilitaires « maison » pour mon workflow photographique. J’ai aussi un collègue qui a mis en place tout un système de génération de planches-contacts et de sauvegarde automatique tout codé en python. C’est vraiment un bel outil!

  4. Pierre dit :

    La problème c’est que ta liste contient une suite d’entier continue… Que faire si j’ai une liste du type [0,5,8,2,9,9]??

  5. olivier dit :

    Pierre> Ça dépend de ce que tu veux faire par la suite. L’article se concentre sur l’échantillonnage pseudo-aléatoire sur une liste quelconque. Si tu souhaites dédoublonner, le plus simple est de passer par un « set » : ma_liste = list(set(ma_liste))

Répondre à SteakhachaiAnnuler la réponse.