Je dois choisir "x" nombre de nombres aléatoires non répétitifs dans une liste. Par exemple:
all_data = [1, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 14, 15, 15]
Comment choisir une liste comme [2, 11, 15]
et non [3, 8, 8]
?
C'est exactement ce que random.sample()
fait.
>>> random.sample(range(1, 16), 3)
[11, 10, 2]
Edit : Je suis presque sûr que ce n’est pas ce que vous avez demandé, mais j’ai été poussé à inclure ce commentaire: si la population à partir de laquelle vous voulez prélever des échantillons contient des doublons, vous devez d’abord les supprimer:
population = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
population = set(population)
samples = random.sample(population, 3)
Quelque chose comme ça:
all_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
from random import shuffle
shuffle(all_data)
res = all_data[:3]# or any other number of items
OU:
from random import sample
number_of_items = 4
sample(all_data, number_of_items)
Si all_data peut contenir des entrées en double, modifiez votre code pour supprimer les doublons en premier, puis utilisez shuffle ou sample:
all_data = list(set(all_data))
shuffle(all_data)
res = all_data[:3]# or any other number of items
D'autres ont suggéré d'utiliser random.sample
. Bien que cette suggestion soit valable, il existe une subtilité que tout le monde a ignorée:
Si la population contient des répétitions, , Chaque occurrence est une sélection possible de Dans l'échantillon.
Ainsi, vous devez transformer votre liste en un ensemble pour éviter les valeurs répétées:
import random
L = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
random.sample(set(L), x) # where x is the number of samples that you want
Une autre façon, bien sûr, avec toutes les solutions, vous devez vous assurer qu’il y a au moins 3 valeurs uniques dans la liste d’origine.
all_data = [1,2,2,3,4,5,6,7,8,8,9,10,11,11,12,13,14,15,15]
choices = []
while len(choices) < 3:
selection = random.choice(all_data)
if selection not in choices:
choices.append(selection)
print choices
Vous pouvez également générer une liste de choix aléatoires, en utilisant itertools.combinations
et random.shuffle
.
all_data = [1,2,2,3,4,5,6,7,8,8,9,10,11,11,12,13,14,15,15]
# Remove duplicates
unique_data = set(all_data)
# Generate a list of combinations of three elements
list_of_three = list(itertools.combinations(unique_data, 3))
# Shuffle the list of combinations of three elements
random.shuffle(list_of_three)
Sortie:
[(2, 5, 15), (11, 13, 15), (3, 10, 15), (1, 6, 9), (1, 7, 8), ...]
import random
fruits_in_store = ['Apple','mango','orange','pineapple','fig','grapes','guava','litchi','almond']
print('items available in store :')
print(fruits_in_store)
my_cart = []
for i in range(4):
#selecting a random index
temp = int(random.random()*len(fruits_in_store))
# adding element at random index to new list
my_cart.append(fruits_in_store[temp])
# removing the add element from original list
fruits_in_store.pop(temp)
print('items successfully added to cart:')
print(my_cart)
Sortie:
items available in store :
['Apple', 'mango', 'orange', 'pineapple', 'fig', 'grapes', 'guava', 'litchi', 'almond']
items successfully added to cart:
['orange', 'pineapple', 'mango', 'almond']