Выбрать из двух одинаковых списков два разных объекта python с помощью random.choice
У меня есть два одинаковых списка:
['Gameplay ', 'All Levels ', 'Walkthrough ']
['Gameplay ', 'All Levels ', 'Walkthrough ']
мне нужно выбрать рандомный элемент из 1 и 2 списка, но так, чтобы они не повторялись
вот мой пример неудачного кода:
list = ['Gameplay ', 'All Levels ', 'Walkthrough ']
list2 = ['Gameplay ', 'All Levels ', 'Walkthrough ']
x = random.choice(list)
y = random.choice(list2)
while True:
if x != y:
print(x,y)
Ответы (2 шт):
Автор решения: GrAnd
→ Ссылка
Если списки одинаковые, то хранить их оба не имеет никакого смысла.
А для случайной выборки нескольких не повторяющихся значений существует другая функция - random.sample().
import random
lst = ['Gameplay ', 'All Levels ', 'Walkthrough ']
x,y = random.sample(lst, k=2)
print(x,y)
Автор решения: CrazyElf
→ Ссылка
Допустим, в обоих списках возможны повторяющиеся элементы, потому что какие-то варианты должны выбираться чаще, а какие-то реже. И сами списки тоже зачем-то могут повторяться. Тогда со всеми проверками будет примерно так:
import random
def make_choice(list1, list2):
if len(set(list1)|set(list2)) < 2:
print('Выбор двух разных элементов из этих списков невозможен!')
while True:
x = random.choice(list1)
if len(set(list2)-set([x])) < 1:
continue
while True:
y = random.choice(list2)
if y != x:
return x, y
list1 = ['Gameplay ', 'All Levels ', 'Walkthrough ']
list2 = ['Gameplay ', 'All Levels ', 'Walkthrough ']
print(make_choice(list1, list2))
Здесь проверяется:
- возможен ли вообще выбор двух разных элементов из этих списков
- можно ли выбрать другой элемент из второго списка при данном выбранном элементе первого списка
- если все проверки прошли - выбираем из второго списка элемент, пока он не будет отличным от выбранного из первого списка
На самом деле такой вариант не оптимален по скорости, но он рабочий.