Как получить две разные случайные выборки из одного диапазона - PullRequest
2 голосов
/ 20 апреля 2020

Я хочу получить две разные случайные выборки из одного диапазона в python.
Я пробовал что-то вроде этого:

rd1 = random.sample(range(0, 10), 5) 
rd2 = random.sample(range(0, 10), 5)
print(rd1)
print(rd2)

Вывод:

[2, 4, 7, 6, 8]
[2, 4, 0, 7, 5]

Но я хочу, чтобы rd1 и rd2 не имели общих элементов, таких как:

[1, 3, 9, 6, 8]
[2, 4, 0, 7, 5]

или

[0, 2, 9, 6, 1]
[3, 4, 8, 7, 5]

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

random принимает итеративный код, поэтому создайте первый список и затем выполните небольшую фильтрацию, чтобы исключить элементы из первого случайного списка:

import random
rd1  = random.sample(range(0, 10), 5)

rd2  = random.sample([i for i in range(0, 10) if i not in rd1], 5)

print(rd1)
print(rd2)

Вывод:

[2, 6, 9, 5, 0]
[4, 1, 3, 8, 7]
0 голосов
/ 20 апреля 2020

Получите один образец в два раза больше, затем разделите его пополам, примерно так:

rd = random.sample(range(0, 10), 10)
rd1, rd2 = rd[:5], rd[5:]
print(rd1)
print(rd2)

Пример вывода:

[5, 7, 1, 6, 3]
[2, 9, 4, 8, 0]

Кстати, вы также можете использовать random.shuffle чтобы получить rd:

rd = list(range(0, 10))
random.shuffle(rd)
...