Tirage aléatoire dans une liste avec coefficients python

Résolu
leandre44 -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. jee pee Messages postés 31908 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    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
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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