Ich bin ein bisschen von dieser Liste Verständnis verwirrt:In welcher Reihenfolge wird das Python-Listenverständnis ausgeführt?
l = [[i * j for j in range(3, 5)] for i in range(3)]
In welcher Reihenfolge ausgeführt wird?
Ich bin ein bisschen von dieser Liste Verständnis verwirrt:In welcher Reihenfolge wird das Python-Listenverständnis ausgeführt?
l = [[i * j for j in range(3, 5)] for i in range(3)]
In welcher Reihenfolge ausgeführt wird?
Dies ist ein ziemlich Vanille-Liste Verständnis der Form:
[expression for var in iterable]
In diesem Fall geschieht expression
nur eine andere Liste Verständnis zu sein. Also wird das innere Verständnis einmal für jeden Gegenstand, der durch das äußere iterierbare Ergebnis erhalten wird, ausgewertet.
Es könnte ein wenig mehr klar fühlen, wenn wir das innere Verständnis heraus in eine Funktion brechen:
def inner(i):
return [i * j for j in range(3, 5)]
l = [inner(i) for i in range(3)]
Jetzt haben wir mehr klar (hoffentlich sowieso) zu sehen, dass die äußeree Verständnis das innere Verständnis bewirkt einmal auszuführen, für jedes "i
" in range(3)
. .
Stellen Sie es sich von außen in ausgeführt wird
[X for i in range(3)]
In diesem Fall wird die X selbst eine andere Liste Verständnis:
[i*j for j in range(3,5)]
, in dem i
auf einen einzigen Wert gebunden ist.
So erweitert es um [[0*3,0*4],[1*3,1*4],[2*3,2*4]]
oder [[0,0],[3,4],[6,8]]
,
Im folgenden:
l = [[i * j for j in range(3, 5)] for i in range(3)]
i
auf den Werten nimmt 0
, 1
und 2
. Für jeden Wert von i
wird das verschachtelte Liste Verständnis ausgewertet und das Ergebnis in der Top-Level-Liste gespeichert:
[i * j for j in range(3, 5)]
Hier j
nimmt den Wert 3
und 4
. Für jeden Wert wird das Produkt j
mit dem aktuellen Wert i
gespeichert.
Für den ersten Wert von i
, das heißt 0
, ist dies 0
mal die j
Werte, so dass Sie [0, 0]
erhalten.
Für den zweiten Wert von i
, das heißt 1
, ist dies 1
mal die j
Werte, so dass Sie [3, 4]
erhalten.
Für den dritten Wert von i
, das heißt 2
, ist dies 2
mal die j
Werte, so dass Sie [6, 8]
erhalten.
Das Endergebnis ist die Liste dieser Teillisten drei zusammengesetzt, so erhalten Sie:
[[0, 0], [3, 4], [6, 8]]
l = [[i * j for j in range(3, 5)] for i in range(3)]
als vorstellen:
(1) l = [[i * j for j in range(3, 5)] with i = 0] => [[0*3, 0*4]]= [[0,0]]
+(2) l = [[i * j for j in range(3, 5)] with i = 1] =>[[0,0], [3,4]]
+(3) l = [[i * j for j in range(3, 5)] with i = 2] =>[[0,0], [3,4], [6,8]]