Angenommen, wir haben eine Liste mit Zahlen von 0 bis 1000. Gibt es eine pythonische / effiziente Möglichkeit, eine Liste des ersten und jedes nachfolgenden 10. Elements zu erstellen, d [0, 10, 20, 30, ... ]
. H.
Ja, ich kann dies mit einer for-Schleife tun, aber ich frage mich, ob es einen besseren Weg gibt, dies zu tun, vielleicht sogar in einer Zeile?
0
ist überflüssig inl[0::10]
.l[::10]
ist besser lesbar, weniger verwirrend.source_list[::10]
ist das offensichtlichste, aber dies funktioniert nicht für iterierbare und ist für große Listen nicht speichereffizient.itertools.islice(source_sequence, 0, None, 10)
funktioniert für jedes iterable und ist speichereffizient, ist aber wahrscheinlich nicht die schnellste Lösung für große Listen und große Schritte.(source_list[i] for i in xrange(0, len(source_list), 10))
quelle
Sie können den Slice-Operator folgendermaßen verwenden:
quelle
L[2::2]
Aus dem Handbuch:
s[i:j:k] slice of s from i to j with step k
quelle
Dies wählt jedes 10. Element der Liste aus.
quelle
Warum nicht auch einen Schrittparameter der Bereichsfunktion verwenden, um Folgendes zu erhalten:
Zum Vergleich auf meiner Maschine:
quelle
quelle
Hier ist eine bessere Implementierung eines Listenverständnisses für "alle 10 Elemente", bei dem der Listeninhalt nicht als Teil des Mitgliedschaftstests verwendet wird:
Dies ist jedoch immer noch viel langsamer als nur das Aufteilen von Listen.
quelle
Listenverständnisse sind genau dafür gemacht:
Weitere Informationen dazu finden Sie in der offiziellen Python-Dokumentation: http://docs.python.org/tutorial/datastructures.html#list-comprehensions
quelle