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.
Aucun trackbacks pour l'instant
Par date
Les archives
- janvier 2012
- décembre 2011
- octobre 2011
- août 2011
- juin 2011
- mai 2011
- avril 2011
- février 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
Blogroll
- Mon flickr
- steakhachai.fr Un blog sur la photographie
27 juin 2011
Voilà, la force de Python: pouvoir faire des choses élégantes en peu de lignes.
27 juin 2011
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 !
28 juin 2011
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!