2013-05-05 6 views
25

Gegeben mehrere Liste von möglicherweise unterschiedlicher Länge, ich möchte über alle Kombinationen von Werten, ein Element aus jeder Liste durchlaufen. Zum Beispiel:Iterate über alle Kombinationen von Werten in mehreren Listen in Python

first = [1, 5, 8] 
second = [0.5, 4] 

Dann möchte ich die Ausgabe sein:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)] 

Ich möchte über die kombiniert Liste iterieren. Wie bekomme ich das?

Antwort

52

itertools.product sollte den Trick tun.

>>> list(itertools.product([1, 5, 8], [0.5, 4])) 
[(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)] 

Beachten Sie, dass itertools.product einen Iterator zurückgibt, so dass Sie es in eine Liste nicht umwandeln, wenn Sie nur über sie einmal zu durchlaufen werden.

z.

+0

Was ist, wenn 'second = [0.5, 4, 1]' und wir betrachten den Ausgang '(1, 4)' ist gleich wie Ausgang '(4, 1)'? –

+1

@TheRedPea (Angenommen, Sie haben eine '4' in der ersten Liste, und Sie wollen nur eindeutige Ausgaben im Ergebnis) Ich denke, Sie müssen nur danach filtern, mit' set (tuple (sortierte (lst)) für lst in itertools.product (...)) 'oder so ähnlich. – Volatility

+0

@ Volatilität, wäre es auch möglich, diese Kombinationen hinzuzufügen: '(0,5, 1), (0,5, 5), (0,5, 8), (4, 1), (4, 5), (4, 8) '? – Reman

Verwandte Themen