Это именно тот случай, когда zip
был создан для:
from itertools import combinations
a = [['a','b','c'], ['d','e','f'], ['g','h','i'], ['j','k','l']]
result = [list(zip(*x)) for x in combinations(a, 2)]
# If you want to flatten the result:
flat_result = [item for row in result for item in row]
print(flat_result)
результат:
[[('a', 'd'), ('b', 'e'), ('c', 'f')],
[('a', 'g'), ('b', 'h'), ('c', 'i')],
[('a', 'j'), ('b', 'k'), ('c', 'l')],
[('d', 'g'), ('e', 'h'), ('f', 'i')],
[('d', 'j'), ('e', 'k'), ('f', 'l')],
[('g', 'j'), ('h', 'k'), ('i', 'l')]]
flat_result:
[('a', 'd'), ('b', 'e'), ('c', 'f'), ('a', 'g'), ('b', 'h'), ('c', 'i'), ('a', 'j'), ('b', 'k'), ('c', 'l'), ('d', 'g'), ('e', 'h'), ('f', 'i'), ('d', 'j'), ('e', 'k'), ('f', 'l'), ('g', 'j'), ('h', 'k'), ('i', 'l')]
Или, если вы хотите напрямую вычислить плоскую версию:
result = []
for x in combinations(a, 2):
result += list(zip(*x))