Дано: список из списков некоторых элементов. Требуется сгенерировать список пар из всех элементов разных списков между собой. Т.е., например, из списков (1,2,3) и (4,5) получится (1,4), (2,4), (3,4), (1,5),(2,5),(3,5)
Списков может быть много, количество элементов в них произвольным от 1 до бесконечности условно говоря.
Как бы поизящнее и побыстродейственнее сделать, а то алгоритм с 4-мя (четырьмя!!!) вложенными циклами как-то не очень приятно выглядит.
Базовый код примерно следующий:
list1 = ['1','2','3']
list2 = ['10','11','12','13']
list3 = ['20','21']
lista = [list1,list2,list3]
nl = len(lista)
cross=[]
for k in range(nl): # k - номер списка в lista, 0 ... len-1
klist = lista[k]
for m in range(k+1,nl): #m - перебираем все последующие списки
mlist = lista[m]
for i in range(len(klist)): # Составляем пары элементов двух списков
for j in range(len(mlist)):
d2 = [klist[i],mlist[j]]
cross.append(d2)
print(cross)
Результат:
[['1', '10'], ['1', '11'], ['1', '12'], ['1', '13'], ['2', '10'], ['2', '11'], ['2', '12'], ['2', '13'], ['3', '10'], ['3', '11'], ['3', '12'], ['3', '13'], ['1', '20'], ['1', '21'], ['2', '20'], ['2', '21'], ['3', '20'], ['3', '21'], ['10', '20'], ['10', '21'], ['11', '20'], ['11', '21'], ['12', '20'], ['12', '21'], ['13', '20'], ['13', '21']]