Comment sélectionner aléatoirement des éléments d’une liste en Python ?

Introduction

Sélectionner un élément ou une valeur aléatoire dans une liste est une tâche courante – que ce soit pour obtenir un résultat aléatoire dans une liste de recommandations ou simplement une invite aléatoire.

Dans cet article, nous allons voir comment sélectionner aléatoirement des éléments d’une liste en Python. Nous couvrirons la récupération d’éléments aléatoires singuliers, ainsi que la récupération d’éléments multiples – avec et sans répétition.

Sélection d’un élément aléatoire dans une liste Python

L’approche la plus intuitive et la plus naturelle pour résoudre ce problème consiste à générer un nombre aléatoire qui sert d’index pour accéder à un élément de la liste.

Pour mettre en œuvre cette approche, examinons quelques méthodes de génération de nombres aléatoires en Python : random.randint() et random.randrange(). Nous pouvons également utiliser random.choice() et fournir un itérable – ce qui a pour effet de renvoyer un élément aléatoire de cet itérable.

Utilisation de random.randint()

random.randint(a, b) renvoie un nombre entier aléatoire compris entre a et b inclus.

Nous voulons que l’indice aléatoire soit compris entre 0 et len(list)-1, pour obtenir l’indice aléatoire d’un élément de la liste :

import random

liste = ['a', 'b', 'c', 'd', 'e', 'f']
random_index = random.randint(0,len(liste)-1)

print(letters[random_index])

 

L’exécution de ce code plusieurs fois nous donne :

e
c
f
a

Utilisation de random.randrange()

random.randrange(a) est une autre méthode qui renvoie un nombre aléatoire n tel que 0 <= n < a :

import random

liste = ['a', 'b', 'c', 'd', 'e', 'f']
random_index = random.randrange(len(liste))

print(letters[random_index])

L’exécution de ce code plusieurs fois nous donne :

f
d
d
e

Comme random.randrange(len(liste)) renvoie un nombre généré aléatoirement dans la plage de 0 à len(liste) – 1, nous l’utilisons pour accéder à un élément aléatoire dans les lettres, comme nous l’avons fait dans l’approche précédente.

Cette approche est un tout petit peu plus simple que la précédente, simplement parce que nous ne spécifions pas le point de départ, qui est par défaut 0.

Utilisation de random.choices()

Comme la fonction précédente, random.choices() renvoie une liste d’éléments sélectionnés au hasard dans un itérable donné. Cependant, elle ne garde pas trace des éléments sélectionnés, ce qui fait que vous pouvez obtenir des éléments en double :

import random

liste = ['a', 'b', 'c', 'd', 'e', 'f']
print(random.choice(liste))

 

L’exécution de ce code plusieurs fois nous donne :

b
e
e
f
e

 

Sélection de plus d’un élément aléatoire dans une liste Python

Utilisation de random.sample()

La première méthode que nous pouvons utiliser pour sélectionner plus d’un élément au hasard est random.sample(). Elle produit un échantillon, en fonction du nombre d’échantillons que nous souhaitons observer :

import random 

liste = ['a', 'b', 'c', 'd', 'e', 'f']

print(random.sample(liste, 3))

 

Cela renvoie quelque chose du genre :

['d', 'c', 'a']

Utilisation de random.choices()

Comme la fonction précédente, random.choices() renvoie une liste d’éléments sélectionnés au hasard dans un itérable donné. Cependant, elle ne garde pas trace des éléments sélectionnés, ce qui fait que vous pouvez obtenir des éléments en double :

import random 

liste = ['a', 'b', 'c', 'd', 'e', 'f']

print(random.choices(liste, k=3))

 

Cela renvoie quelque chose du genre :

['e', 'f', 'f']

Sélection aléatoire de n éléments sans répétition

Si vous cherchez à créer des collections aléatoires de n éléments, sans répétitions, la tâche est apparemment plus complexe que les tâches précédentes, mais en pratique – c’est assez simple.

Vous mélangez() la liste et la divisez en n parties. Cela garantit qu’aucun élément en double n’est ajouté, puisque vous ne faites que découper la liste, et que nous l’avons mélangée pour que les collections soient aléatoires.

Nous sauvegarderons le résultat dans une nouvelle liste, et s’il n’y a pas assez d’éléments pour former une collection finale, elle sera simplement inachevée :

import random

def select_random_Ns(lst, n):
    random.shuffle(lst)
    result = []
    for i in range(0, len(lst), n):
        result.append(lst[i:i + n])
    return result
        
        
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(select_random_Ns(lst, 2))

 

On obtient ainsi une liste de paires aléatoires, sans répétition :

[[8, 6], [3, 4], [5, 7], [9, 1], [2]]

Conclusion

Dans cet article, nous avons exploré plusieurs façons de récupérer un ou plusieurs éléments choisis au hasard dans une liste en Python.

Nous avons accédé à la liste avec des indices aléatoires en utilisant randint() et randrange(), mais nous avons également obtenu des éléments aléatoires en utilisant choice() et sample().

Pour aller plus loin

Pour approfondir vos connaissances, et développer vos compétences, je vous propose cette sélection de livre.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Show Buttons
Hide Buttons
Translate »
%d blogueurs aiment cette page :