Ответ 1
Вы хотите itertools.product:
>>> import itertools
>>> a = [1,2]
>>> b = [4,5]
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (2, 4), (2, 5)]
Например, у меня код выглядит следующим образом:
a = [1, 2]
b = [4, 5]
Как я могу получить что-то вроде этого:
[(1,4), (1,5), (2,4), (2,5)]
Подобно функции zip
, но со всеми возможными вариантами. Или я не могу?
Вы хотите itertools.product:
>>> import itertools
>>> a = [1,2]
>>> b = [4,5]
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (2, 4), (2, 5)]
Если вас интересует только результат, то itertools.product
- это то, что вам нужно (+1 для @DSM для этого). Однако, если вас интересует алгоритм, который генерирует что-то вроде этого, он называется рекурсивный спуск. Алгоритм в этом случае будет работать следующим образом (я просто собираюсь распечатать результаты здесь для ясности):
def product(L, tmp=None):
if tmp is None:
tmp = []
if L==[]:
print tmp
else:
for i in L[0]:
product(L[1:], tmp+[i])
Таким образом,
>>> product([[1,2], [4,5]])
[1, 4]
[1, 5]
[2, 4]
[2, 5]
Надеюсь, что это поможет
Вы можете сделать это красиво со списком, или еще лучше с выражением генератора, если вам просто нужно выполнить итерацию с помощью комбинаций.
Здесь используется понимание списка:
a = [1, 2]
b = [4, 5]
[(i, j) for i in a for j in b]
И здесь с выражением генератора:
for pair in ((i, j) for i in a for j in b):
print(pair)
Не упускайте из виду очевидное:
out = []
for a in [1, 2]:
for b in [4, 5]:
out.append((a, b))
или список понятий:
a = [1, 2]
b = [4, 5]
out = [(x, y) for x in a for y in b]
Оба производят out == [(1, 4), (1, 5), (2, 4), (2, 5)]