List Verständnis für Loops Python

Ich benutze eine Menge von N dimensionalen Arrays und es bekommt einen Schmerz zu schreiben, um solche eingekerbten Code und ich weiß, einige Codes können durch Listenverständnisse und Inline-Anweisungen ersetzt werden. Beispielsweise:

for x in (0,1,2,3): for y in (0,1,2,3): if x < y: print (x, y, x*y) 

Kann ersetzt werden mit:

 print [(x, y, x * y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y] 

Aber wie könnte ich die Aktion anstelle von Druck ändern, um etwas anderes zu tun wie:

 total = x+y 

Also, was ich tun möchte, ist so etwas wie:

 [(total+=x+y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y] 

Das geht aber nicht

Gibt es einen klugen Weg, dies zu tun, anstatt:

 for x in (0,1,2,3): for y in (0,1,2,3): if x < y: total+=x+y 

5 Solutions collect form web for “List Verständnis für Loops Python”

sum hier:

 total = sum(x+y for x in (0,1,2,3) for y in (0,1,2,3) if x < y) 

Als Alternative zum Schreiben Loops N Ebenen tief, könnten Sie itertools.product() :

 In [1]: import itertools as it In [2]: for x, y in it.product((0,1,2,3),(0,1,2,3)): ...: if x < y: ...: print x, y, x*y 0 1 0 0 2 0 0 3 0 1 2 2 1 3 3 2 3 6 

Das reicht natürlich auf N Dimensionen.

Verwenden Sie numpy . Hier können Sie Arrays verwenden, die sich wie Vektoren addieren:

 x = numpy.arange(3) y = numpy.arange(3) total = x + y 

Mit der geänderten Frage fügen Sie auch einen Anruf hinzu

 total = numpy.sum(x+y) 

Verringern Sie die Funktion direkt reduziert kollektive Elemente auf einzelne Artikel. Sie können hier mehr über sie lesen , aber das sollte für Sie arbeiten:

 total=reduce(lambda x,y:x+y,range(4)) 

oder

 total=reduce(lambda x,y:x+y,(0,1,2,3)) 

Eine andere Möglichkeit ist:

 for x,y in ((x,y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y): print (x, y, x * y) 

Auf diese Weise können Sie über alles, was Sie in einem Listenverständnis verwenden, ohne tatsächlich die Erstellung der begrifflichen Liste (wenn Sie meine Bedeutung erhalten) iterieren, wenn die verstandene Liste groß ist, vielleicht so groß es gesättigt ist oder gar nicht in Erinnerung passt, Das ist ziemlich praktisch ..

  • Geschwindigkeits- / Effizienzvergleich für Loop vs List Verständnis vs andere Methoden
  • Wenn "Starmap" über "List Comprehension" bevorzugt werden könnte
  • Python lese spezifische Zeilen aus CSV mit Listenverständnis
  • Pythonic Style für mehrsprachiges Listenverständnis
  • Einfacher Syntaxfehler in Python, wenn sonst Dict Verständnis
  • Dieses List-Verständnis in R umschreiben
  • Getting <generator object <genexpr>
  • Weird Verhalten: Lambda innerhalb Liste Verständnis
  • List Verständnis vs Generator Ausdruck seltsame Timue Ergebnisse?
  • Zwischenvariable in einem Listenverständnis zur gleichzeitigen Filterung und Transformation
  • Inkonsistente Verständnis-Syntax?
  • Python ist die beste Programmiersprache der Welt.