Frage Paarweise Kreuzprodukt in Python [duplizieren]


Diese Frage hat hier bereits eine Antwort:

Wie kann ich die Liste der Cross-Produkte erhalten? Paare aus einer Liste von beliebig langen Listen in Python?

Beispiel

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

crossproduct(a,b) sollte nachgeben [[1, 4], [1, 5], [1, 6], ...].


75
2018-03-29 21:27


Ursprung


Antworten:


Du schaust nach itertools.product wenn du (mindestens) Python 2.6 hast.

>>> 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)]

113
2018-03-29 21:29



Da du nach einer Liste gefragt hast:

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

Aber Sie können den Overhead einer Liste vermeiden, wenn Sie diese nur durchgenerieren, indem Sie stattdessen Generatoren verwenden:

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

Benimmt sich identisch in a for Schleife, führt aber nicht zur Erstellung eines list.


74
2018-03-29 21:30



Mit Generatoren brauchen Sie keine Werkzeuge, einfach:

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

for u, v in gen:
    print u, v

11
2017-11-07 09:39