Ich kann also beginnen mit collection[len(collection)-1]
und enden mit collection[0]
.
Ich möchte auch auf den Schleifenindex zugreifen können.
Ich kann also beginnen mit collection[len(collection)-1]
und enden mit collection[0]
.
Ich möchte auch auf den Schleifenindex zugreifen können.
El reversed
eingebaute Funktion ist praktisch:
for item in reversed(sequence):
El Dokumentation for reversed erklärt seine Grenzen.
Für die Fälle, in denen ich eine Sequenz in umgekehrter Richtung zusammen mit dem Index durchlaufen muss (z. B. für In-Place-Änderungen, die die Sequenzlänge ändern), habe ich diese Funktion in meinem Codeutil-Modul definiert:
from six.moves import zip as izip, range as xrange
def reversed_enumerate(sequence):
return izip(
reversed(xrange(len(sequence))),
reversed(sequence),
)
Dadurch wird vermieden, dass eine Kopie der Sequenz erstellt wird. Offensichtlich ist die reversed
Einschränkungen gelten weiterhin.
Sie können auch die Funktionen "Bereich" oder "Anzahl" verwenden. Wie folgt:
a = ["foo", "bar", "baz"]
for i in range(len(a)-1, -1, -1):
print(i, a[i])
3 baz
2 bar
1 foo
Sie könnten auch "count" aus itertools wie folgt verwenden:
a = ["foo", "bar", "baz"]
from itertools import count, takewhile
def larger_than_0(x):
return x > 0
for x in takewhile(larger_than_0, count(3, -1)):
print(x, a[x-1])
3 baz
2 bar
1 foo
In Python 3 erstellt list eine Kopie, also reversed(list(enumerate(collection))
ineffizient sein könnte, wird die Erstellung einer weiteren Liste nicht wegoptimiert.
Wenn es sich bei der Sammlung um eine Liste handelt, ist es vielleicht am besten, die Komplexität hinter einem Iterator zu verstecken
def reversed_enumerate(collection: list):
for i in range(len(collection)-1, -1, -1):
yield i, collection[i]
Also, das sauberste ist:
for i, elem in reversed_enumerate(['foo', 'bar', 'baz']):
print(i, elem)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.