Der eleganteste Weg, Elemente verschachtelter Listen zu verändern
Ich habe eine 2D-Liste, die wie folgt aussieht:
table = [['donkey', '2', '1', '0'], ['goat', '5', '3', '2']]
Möchte ich ändern Sie die letzten drei Elemente, die zu zahlen, aber den code unten fühlt sich sehr hässlich:
for row in table:
for i in range(len(row)-1):
row[i+1] = int(row[i+1])
Aber ich hätte lieber etwas, das aussieht wie:
for row in table:
for col in row[1:]:
col = int(col)
Ich denke, es sollte ein Weg gefunden werden, schreiben Sie den code oben, aber die Scheibe erzeugt einen iterator/neue Liste, die getrennt von der ursprünglichen, so dass die Bezüge nicht zum tragen.
Gibt es eine Möglichkeit, um mehr Pythonic Lösung?
InformationsquelleAutor der Frage Conrad.Dean | 2011-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht oben schauen, mehr pythonic?
InformationsquelleAutor der Antwort Shekhar
Versuchen:
AFAIK, die Zuordnung zu einer
list
slice-Kräfte die operation erfolgt statt der Schaffung einer neuenlist
.InformationsquelleAutor der Antwort MAK
Ich mag Shekhar Antwort eine Menge.
Als Allgemeine Regel gilt, beim schreiben von Python-code, wenn Sie finden, sich selbst schreiben f
or i in range(len(somelist))
Sie tun es falsch:enumerate
wenn Sie eine einzelne Listezip
oderitertools.izip
wenn Sie 2 oder mehr Listen, die Sie Durchlaufen parallelIn Ihrem Fall, die erste Spalte ist anders, so dass Sie nicht aus nutzen auflisten:
InformationsquelleAutor der Antwort gurney alex
Ihre "hässlichen" code verbessert werden kann, gerade indem Sie
range
mit zwei Argumenten:Dies ist wahrscheinlich das beste, was Sie tun können, wenn Sie darauf bestehen, auf eine änderung der Artikel an Ort und Stelle, ohne Zuweisung von neuen temporären Listen (mit einer Liste Verständnis,
map
und/oder aufschneiden). Sehen Gibt es ein direktes äquivalent auf 'Karte' in python?Obwohl ich dies nicht empfehlen, können Sie auch diesen code, allgemeiner, durch die Einführung Ihrer eigenen in-place-map-Funktion:
Persönlich, ich finde diese weniger Pythonic. Es gibt vorzugsweise nur eine offensichtliche Weg, es zu tun, und das ist es nicht.
InformationsquelleAutor der Antwort Wesley
Use-Liste Verstehens:
InformationsquelleAutor der Antwort Nicholas Mancuso
Dies funktionieren wird:
Allerdings möchten Sie vielleicht denken über das tun der Umwandlung an der Stelle, wo die Liste zum ersten mal erstellt.
InformationsquelleAutor der Antwort Keith
Diese leistet, was Sie suchen. Es ist eine lesbare Lösung. Sie können gehen für eine ähnliche Verwendung listcomp zu.
InformationsquelleAutor der Antwort Senthil Kumaran