1
votes

Comment créer une liste de valeurs aléatoires avec une longueur spécifique avec chaque valeur au moins une fois dans la plage en Python?

Je souhaite créer une liste de valeurs aléatoires avec une longueur spécifique avec chaque valeur au moins une fois dans une plage en utilisant Python. Voici mon code Python:

[1, 3, 2, 4, 1, 5]

J'ai obtenu une liste de sortie à une exécution comme ci-dessous:

[1, 4, 2, 4, 1, 5]

Dans la sortie ci-dessus dans start et la plage d'arrêt (1-5) 3 est manquante. Mais je veux la liste avec chaque valeur au moins une fois dans la plage. Ma sortie attendue comme ci-dessous:

import random

Start = 1
Stop = 5
limit = 6

RandomListOfIntegers = [random.randint(Start, Stop) for iter in range(limit)]
print(RandomListOfIntegers)

Guide-moi pour obtenir la sortie ci-dessus. Merci d'avance.


1 commentaires

En supposant que la limite est supérieure à la plage allant du début à l'arrêt, que diriez-vous de créer une liste avec [start, start + 1, ..., stop], en ajoutant autant que vous en avez besoin, puis en mélangeant la liste?


3 Réponses :


2
votes

Vous pouvez générer tous les nombres, mélanger ce que vous avez généré puis ajouter un nombre aléatoire pour atteindre la limite:

import random

Start = 1
Stop = 5
limit = 6
RandomListOfIntegers = list(range(Start, Stop+1))
random.shuffle(RandomListOfIntegers)
RandomListOfIntegers.extend(random.choices(RandomListOfIntegers, k=limit-Stop))
print(RandomListOfIntegers)


1 commentaires

Merci beaucoup pour vos conseils. J'ai obtenu ma sortie attendue selon votre code suggéré. Merci.



0
votes

Vous le faites en deux étapes

  • échantillonnez la plage, avec sa longueur, vous obtiendrez tous les nombres de l'intervalle dans un ordre aléatoire
  • étendre avec un nombre aléatoire jusqu'à ce que vous atteigniez la limite
allValues = list(range(start, stop + 1))
random.shuffle(allValues)
randomListOfIntegers = allValues + [random.randint(start, stop) for iter in range(limit - stop)]

Vous pouvez aussi, générer toutes les valeurs et les mélanger, puis ajouter des éléments pour atteindre la limit

randomListOfIntegers = random.sample(range(start, stop + 1), stop) + \
                       [random.randint(start, stop) for iter in range(limit - stop)]


1 commentaires

Merci beaucoup pour vos conseils. J'ai obtenu ma sortie attendue selon votre code suggéré. Merci.



0
votes

Je pense qu'il serait plus facile de créer une liste avec tous les nombres, d'ajouter des éléments supplémentaires puis de les mélanger, comme ceci:

[3, 2, 4, 1, 5, 3]

il produit:

import random

Start=1
Stop=5
Limit=6

mylist = list(range(Start,Stop+1))
for i in range(Limit-(Stop-Start)-1):
    mylist.append(random.randint(Start,Stop))
random.shuffle(mylist)
print(mylist)


2 commentaires

Cette mylist = [Start: Stop] n'existe pas;


@Gamopo: Merci beaucoup pour vos conseils. J'ai obtenu ma sortie attendue selon votre code suggéré. Merci.