Ich möchte das Verständnis verschachtelter Listen verstehen. Unten habe ich einen Listenverständnisausdruck und deren for-Schleifenäquivalent aufgelistet.
Ich frage mich, ob mein Verständnis bei diesen richtig ist.
Zum Beispiel,
[(min([row[i] for row in rows]),max([row[i] for row in rows]))
for i in range(len(rows[0]))]
ist äquivalent zu
result=[]
for i in range(len(rows[0])):
innerResult=[]
for row in rows:
innerResult.append(row[i])
innerResult2=[]
for row in rows:
innerResult2.append(row[i])
tuple=(min(innerResult), max(innerResult2))
result.append(tuple)
Wenn ich verallgemeinern darf, denke ich
[exp2([exp1 for x in xSet]) for y in ySet]
Form kann wie folgt übersetzt werden. (Ich hoffe, ich habe Recht damit)
result=[]
for y in ySet:
innerResult =[]
for x in xSet:
innerResult.append(exp1)
exp2Result = exp2(innerResult)
result.append(exp2Result)
Für einen einfacheren Fall
[exp1 for x in xSet for y in ySet]
entspricht
result=[]
for x in xSet:
for y in ySet:
result.append(exp1)
wohingegen,
[[exp1 for x in xSet] for y in ySet]
entspricht
result=[]
for y in ySet:
innerResult=[]
for x in xSet:
innerResult.append(exp1)
result.append(innerResult)
Ich habe eine ähnliche Frage zu Äquivalent für Schleifenausdruck für komplexes Listenverständnis gestellt.
Die dort gegebenen Antworten rekonstruieren die Form, nachdem sie verstanden haben, was sie intern tut.
Ich möchte wissen, wie es systematisch funktioniert, damit ich das Konzept auf andere leicht unterschiedliche Beispiele anwenden kann.
cols = zip(*rows)
Sie einfachmin(col)
undmax(col)
für jede Spalte Folgendes verwendet hätten :[(min(c), max(c)) for c in cols]
. Oder in einer kurzen Zeile :[(min(c), max(c)) for col in zip(*rows)]
.