Когда необходимо получить все комбинации из элементов итерируемых объектов (декартово произведения), проще всего воспользоваться инструментов itertools.product, который является эквивалентом вложенных for циклов (где крайний правый элемент смещается при каждой итерации, выходной порядок соответствует входному). Пользоваться им легко и безболезненно.
На вход itertools.product() получает итерируемые объекты и необязательный repeat – что бы вычислить результат с одним объектом (самим собой)
1 2 3 4 5 |
from itertools import product list_a = [1, 2, 3, 4] list_b = [5, 6, 7] print([item for item in product(list_a, list_b)]) # [(1, 5), (1, 6), (1, 7), (2, 5), (2, 6), (2, 7), (3, 5), (3, 6), (3, 7), (4, 5), (4, 6), (4, 7)] |
Вариант с умножением итератора самого на себя
1 2 3 4 |
from itertools import product list_c = [1, 'a', 2] print([item for item in product(list_c, repeat=2)]) # [(1, 1), (1, 'a'), (1, 2), ('a', 1), ('a', 'a'), ('a', 2), (2, 1), (2, 'a'), (2, 2)] |