Pairwise crossproduct в Python Как я могу получить список пар перекрестных продуктов из списка произвольно длинных списков в Python? Пример a = [1, 2, 3] b = [4, 5, 6] crossproduct(a,b) должен давать [[1, 4], [1, 5], [1, 6], ...]. Ответ 1 Вы ищете itertools.product, если вы находитесь (по крайней мере) Python 2.6. >>> import itertools >>> a=[1,2,3] >>> b=[4,5,6] >>> itertools.product(a,b) <itertools.product object at 0x10049b870> >>> list(itertools.product(a,b)) [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)] Ответ 2 Поскольку вы попросили список: [(x, y) for x in a for y in b] Но вы можете избежать накладных расходов на список, если вы просто перебираете их, используя вместо этого генераторы: ((x, y) for x in a for y in b) Идет тотально в цикле for, но не приводит к созданию list. Ответ 3 Используя генераторы, нет необходимости в itertools, просто: gen = ((x, y) for x in a for y in b) for u, v in gen: print u, v
Ответ 1 Вы ищете itertools.product, если вы находитесь (по крайней мере) Python 2.6. >>> import itertools >>> a=[1,2,3] >>> b=[4,5,6] >>> itertools.product(a,b) <itertools.product object at 0x10049b870> >>> list(itertools.product(a,b)) [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Ответ 2 Поскольку вы попросили список: [(x, y) for x in a for y in b] Но вы можете избежать накладных расходов на список, если вы просто перебираете их, используя вместо этого генераторы: ((x, y) for x in a for y in b) Идет тотально в цикле for, но не приводит к созданию list.
Ответ 3 Используя генераторы, нет необходимости в itertools, просто: gen = ((x, y) for x in a for y in b) for u, v in gen: print u, v