Мне нужно выделить "х" количество нереацируемых случайных чисел из списка. Например:
all_data = [1, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 14, 15, 15]
Как выбрать список, например [2, 11, 15]
, а не [3, 8, 8]
?
Мне нужно выделить "х" количество нереацируемых случайных чисел из списка. Например:
all_data = [1, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 14, 15, 15]
Как выбрать список, например [2, 11, 15]
, а не [3, 8, 8]
?
Именно это делает random.sample()
.
>>> random.sample(range(1, 16), 3)
[11, 10, 2]
Изменить. Я почти уверен, что это не то, что вы просили, но мне было предложено включить этот комментарий: если население, которое вы хотите взять сэмплы, содержит дубликаты, вы должны удалить их первый:
population = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
population = set(population)
samples = random.sample(population, 3)
Что-то вроде этого:
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
ИЛИ
from random import sample
number_of_items = 4
sample(all_data, number_of_items)
Если all_data может содержать повторяющиеся записи, чем изменить свой код, чтобы сначала удалить дубликаты, а затем использовать случайный или образец:
all_data = list(set(all_data))
shuffle(all_data)
res = all_data[:3]# or any other number of items
Другие предложили использовать random.sample
. Хотя это правильное предложение, есть одна тонкость, которую все игнорировали:
Если популяция содержит повторы, то каждое возникновение является возможным выбор в образце.
Таким образом, вам нужно превратить свой список в набор, чтобы избежать повторных значений:
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
Вы также можете создать список случайных вариантов, используя itertools.combinations
и 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)
Вывод:
[(2, 5, 15), (11, 13, 15), (3, 10, 15), (1, 6, 9), (1, 7, 8), ...]
Другим способом, конечно же, со всеми решениями, вы должны быть уверены, что в исходном списке есть как минимум 3 уникальных значения.
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