Как вывести перебор элементов максимально разным и НЕ по порядку?

Имеется 3 списка. Надо их перебрать с максимальным отличием. Я пробовал отсортировать по количеству элементов и потом перемножить, но повторение с предыдущим все равно получается:

from itertools import product
the_list = [[111, 182], [264,4, 271], [48, 98, 104, 134, 141, 143, 180, 213, 225, 244, 278]]
the_list = sorted(the_list, key=len, reverse=True)
for i in list(product(*the_list)):
    print(i)

Как перебрать их с максимальным отличием (чтобы не for-перебор был)? Очередность примерного перебора на картинке показал.

!Дополнение:

  1. рандомность не нужна
  2. Я нашел закономерноть!!! Во-общем, тут такая схема: нужно брать каждые len(lstK1)*len(lstK2)*..*len(lstKN-1) + len(lstKN-1)+1, если len(lstN)>1. Причем итераций будет столько, сколько комбинаций!

Теперь вопрос. Есть такая библиотека, которая делает копию списка в таком порядке?

Примерная очередность


Ответы (1 шт):

Автор решения: GrAnd

Если длины подсписков не кратны, то, как мне кажется, подойдёт вот такой вариант.

# from math import prod    # Python 3.8+
from numpy import prod
the_list = [[111, 182], [264,4, 271], [48, 98, 104, 134, 141, 143, 180, 213, 225, 244, 278]]
prod_lengths = prod(list(map(len, the_list)))
result = list(zip(*(x*(prod_lengths//len(x)) for x in the_list)))

Или через генератор, чтобы не занимать память размножением списков.

def get_combination(*args):
    for i in range(prod(list(map(len, the_list)))):
        yield tuple(lst[i%len(lst)] for lst in args)

result = list(get_combination(*the_list))
→ Ссылка