Попарно crossproduct в Python [дубликат]



этот вопрос уже есть ответ здесь:




  • Получить декартово произведение ряда списков?

    10 ответов



как я могу получить список товара крест пар из списка произвольно длинных списков в Python?



пример



a = [1, 2, 3]
b = [4, 5, 6]


crossproduct(a,b) должна принести [[1, 4], [1, 5], [1, 6], ...].

472   3  

3 ответов:

вы ищете itertools.продукт Если вы на (по крайней мере) 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)]

так как вы просили список:

[(x, y) for x in a for y in b]

но вы можете избежать накладных расходов списка, если вы просто перебираете их с помощью генераторов вместо этого:

((x, y) for x in a for y in b)

ведет себя одинаково в for петли, но не приводит к созданию list.

использование генераторов нет необходимости в itertools, просто:

gen = ((x, y) for x in a for y in b)

for u, v in gen:
    print u, v

Comments

    Ничего не найдено.