Wie teilt man eine Liste in gleich große Teile auf?
Ich habe eine Liste beliebiger Länge, und ich muss sie in gleich große Teile aufteilen und darauf operieren. Es gibt einige offensichtliche Möglichkeiten, dies zu tun, wie die Führung eines Zählers und zwei Listen, und wenn die zweite Liste füllt, fügen Sie es der ersten Liste und leeren Sie die zweite Liste für die nächste Runde von Daten, aber dies ist potenziell extrem teuer.
Ich habe mich gefragt, ob jemand eine gute Lösung für Listen beliebiger Länge hat, z.B. mit Generatoren.
Ich habe in itertools
nach etwas Nützlichem gesucht, aber ich konnte nichts offensichtlich Nützliches finden. Vielleicht habe ich es aber auch übersehen.
Verwandte Frage: Was ist der "pythonischste" Weg, um über eine Liste in Abschnitten zu iterieren?
2047
3
Hier ist ein Generator, der die gewünschten Chunks liefert:
Wenn Sie Python 2 verwenden, sollten Sie
xrange()
anstelle vonrange()
verwenden:Sie können auch einfach das Listenverständnis verwenden, anstatt eine Funktion zu schreiben, obwohl es eine gute Idee ist, Operationen wie diese in benannten Funktionen zu kapseln, damit Ihr Code leichter zu verstehen ist. Python 3:
Python 2 Version:
Hier ist ein Generator, der mit beliebigen Iterablen arbeitet:
Beispiel:
Wenn Sie die Listengröße kennen:
Wenn Sie es nicht wissen (ein Iterator):
Im letzteren Fall kann man es schöner formulieren, wenn man sicher sein kann, dass die Folge immer eine ganze Anzahl von Teilen der gegebenen Größe enthält (d. h. es gibt kein unvollständiges letztes Teilstück).