2016-06-10 9 views
0

Gestern habe ich eine Liste Verständnis und sah sum(x[y]) und versuchte, aber nicht zu verstehen, was genau passiert.Konnte nicht genau verstehen, was Sum-Funktion hier macht

Für Lo Shu magic square zu schaffen, sah ich sum(x[y]), wo x eine verschachtelte Liste, y in Reichweite befindet. Ich weiß nur grundlegende Funktion Prozess Summe, würde ich mich freuen, wenn jemand oben erwähnte Konzept und anderen Anwendungsprozess Summenfunktion alle Werte

>>> values = [list(range(1, 4)), list(range(4, 7))] 

>>> values 
[[1, 2, 3], [4, 5, 6]] 

>>> sum(x[y] for x in values for y in range(2)) 
12 
>>> sum(x[y] for x in values for y in range(3)) 
21 
+4

Das sind eigentlich Generatorausdrücke. Ein kleiner aber feiner Unterschied. –

+1

Versuchen Sie, die Anweisungen ohne den Generatorausdruck neu zu schreiben, und Sie verstehen es möglicherweise. –

Antwort

2

Die sum Funktion es präsentiert fügt erklärt.

(x[y] for x in values for y in range(2)) liefert die Werte 1, 2, 4, 5 und
(x[y] for x in values for y in range(3)) liefert die Werte 1, 2, 3, 4, 5, 6. So erhalten Sie sum([1,2,4,5])=12 und sum([1, 2, 3, 4, 5, 6])=21.

Lesen Sie the docs, um zu verstehen, wie Generatoren arbeiten.

+1

Der Generatorausdruck ist iterierbar und liefert Werte. Es erzeugt keine Liste. –

+0

Was ist der Unterschied? Arbeiten sie nicht auf die gleiche Weise? Ist es etwas Leistungsbezogenes? – SvbZ3r0

+1

Ja, es ist leistungsbezogen. Wenn Sie nicht alle Werte benötigen, werden sie nur bei Bedarf erstellt. –