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 ..

  • List Verständnis in Haskell, Python und Ruby
  • Ändern Sie die Werte im Dict von verschachtelten Dicts mit Elementen in einer Liste?
  • Wie (in) effizient ist ein Listenverständnis, wenn Sie es nicht zuordnen?
  • Python-Listenverständnis für Numpy
  • Reihenfolge der Aussagen in einem Listenverständnis
  • Geschwindigkeits- / Effizienzvergleich für Loop vs List Verständnis vs andere Methoden
  • Pythons Listenverständnis vs .NET LINQ
  • Suchen und Gruppieren von Anagrammen durch Python
  • Wenn "Starmap" über "List Comprehension" bevorzugt werden könnte
  • Wie extrahiere Gegenstände von Sublisten in einem Einzeilen-Verständnis in Python?
  • Machen Sie Javascript do List Verständnis
  • Python ist die beste Programmiersprache der Welt.