Выбрать из двух одинаковых списков два разных объекта 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))

Здесь проверяется:

  • возможен ли вообще выбор двух разных элементов из этих списков
  • можно ли выбрать другой элемент из второго списка при данном выбранном элементе первого списка
  • если все проверки прошли - выбираем из второго списка элемент, пока он не будет отличным от выбранного из первого списка

На самом деле такой вариант не оптимален по скорости, но он рабочий.

→ Ссылка