In Python gibt es einen kurzen Weg, um eine Liste Verständnis mit mehreren Iteratoren zu benutzen?

StackOverflow https://stackoverflow.com/questions/329886

Frage

Im Grunde möchte ich eine Liste Verständnis über das „kartesische Produkt“ von zwei Iteratoren bauen. Denken Sie an dem folgenden Haskell Code :

[(i,j) | i <- [1,2], j <- [1..4]]

was ergibt

[(1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(2,3),(2,4)]

Kann ich ein ähnliches Verhalten in Python in prägnanter Weise erhalten?

War es hilfreich?

Lösung

Sind Sie das fragen?

[ (i,j) for i in range(1,3) for j in range(1,5) ]

Andere Tipps

kartesisches Produkt im itertools Modul (in 2.6) .

>>> import itertools
>>> list(itertools.product(range(1, 3), range(1, 5)))
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4)]

Spaß Tatsache über das verschachtelte Verständnis: es ahmt verschachtelte „für“ Loops, so können die inneren von den äußeren diejenigen Werte verwenden. Dies ist in dem kartesischen Produkt Fall nicht sinnvoll, aber gut zu wissen. Zum Beispiel:

[ (i,j) for i in range(10) for j in range(i) ] 

erzeugt alle Paare (i,j) wo 0>=i>j>10.

Dies scheint zu tun, was Sie beschreiben:

[[a, b] für einen im Bereich (1,3) für den Bereich B in (1,5)]

UPDATE: Verflixt! Sollte die Seite neu geladen S.Lott Antwort zu sehen, vor der Veröffentlichung. Hmmm ... was für ein wenig zu tun, Mehrwert-? Vielleicht ein kurzes Zeugnis für die Nützlichkeit von interaktivem Modus mit Python.

Ich komme zuletzt von einem Hintergrund mit Perl so mit Fragen wie diese finde ich es sehr hilfreich „Python“ in der Befehlszeile eingeben und in der interaktiven Modus fällt und nur) beginnen Dinge zu versuchen, und b) Nur die Nettigkeiten von Pfeil nach oben schlagen und meine früheren Versuch Einstellung, bis ich bekommen, was ich will. Jedes Mal, wenn ich auf einig Keyword-trüb bin, Hilfe naht. Geben Sie einfach: help ( „some_keyword“), lesen Sie die kurze Zusammenfassung, dann drücken Sie „Q“ und ich bin wieder auf Linie im direkten Gespräch mit dem Python-Interpreter.

Zu empfehlen, wenn Sie ein Anfänger sind und nicht verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top