Tirage aléatoire dans une liste avec coefficients python

Résolu/Fermé
leandre44 - 10 déc. 2021 à 14:28
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 15 déc. 2021 à 16:59
Bonjour,

Je suis actuellement de développer un jeu sur python (je suis débutant).

J'ai besoin de choisir un élément au hasard dans une liste mais je veux que les éléments de la liste aient des coefficient et aient donc plus de chance d'être sélectionnés si le coefficient est plus élevé.

Merci d'avance

2 réponses

jee pee Messages postés 39649 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
10 déc. 2021 à 15:03
Bonjour,

Tu pourrais faire une liste avec (élément, poids) (('A',2),('B',3),('C',5) ....

Avec cette liste tu génères une autre liste ('A','A','B','B','B','C','C','C','C','C',...)

Et sur cette dernière liste tu sélectionnes une valeur aléatoirement.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 15 déc. 2021 à 17:09
Bonjour,

Si tu veux faire un seul tirage :
  • voir
    random.choices
    (avec
    k = 1
    ) pour la version standard
  • voir
    np.random.choice
    pour la version
    numpy
    . Note que contrairement à la version standard les poids doivent être normalisés (i.e., leur somme doit valoir 1)


Dans les deux cas, tu peux passer en paramètre une distribution de probabilité discrète.

Si tu veux faire plusieurs tirages, c'est le même principe :

L'avantage de la version
numpy
, c'est que si tu veux tirer un tableau (quel que soit le nombre de dimensions), le paramètre
size
permet de tout faire directement (et par la suite, si tu as des calculs à faire, ce sera plus rapide en utilisant les fonctionnalités de
numpy
qu'en python standard). Pour un jeu, ça n'est pas forcément un aspect déterminant car il souvent peu de calculs, mais pour du calcul scientifique ça peut être un point important.

Exemples :

import random
print(random.choices(["apple", "banana", "cherry"], k = 1, weights = [8, 1, 1]))
print(random.choices(["apple", "banana", "cherry"], k = 5, weights = [8, 1, 1]))


import numpy as np
import numpy.random
print(np.random.choice(["apple", "banana", "cherry"], p = [0.8, 0.1, 0.1]))
print(np.random.choice(["apple", "banana", "cherry"], size= (5, ), p = [0.8, 0.1, 0.1]))


Bonne chance
0