So kann ich beginnen len(collection)
und enden in collection[0]
.
Ich möchte auch auf den Schleifenindex zugreifen können.
Verwenden Sie die integrierte reversed()
Funktion:
>>> a = ["foo", "bar", "baz"]
>>> for i in reversed(a):
... print(i)
...
baz
bar
foo
Um auch auf den ursprünglichen Index zuzugreifen, verwenden Sie ihn enumerate()
in Ihrer Liste, bevor Sie ihn an reversed()
folgende Adresse übergeben :
>>> for i, e in reversed(list(enumerate(a))):
... print(i, e)
...
2 baz
1 bar
0 foo
Da enumerate()
ein Generator zurückgegeben wird und Generatoren nicht rückgängig gemacht werden können, müssen Sie ihn in einen list
ersten konvertieren .
reversed()
Ändert die Liste nicht.reversed()
erstellt keine Kopie der Liste (andernfalls würde O (N) zusätzlichen Speicher benötigt). Wenn Sie die Liste ändern müssen, verwenden Siealist.reverse()
; Wenn Sie eine Kopie der Liste in umgekehrter Reihenfolge benötigen, verwenden Siealist[::-1]
.Du kannst tun:
(Oder was auch immer Sie in der for-Schleife tun möchten.)
Das
[::-1]
Slice kehrt die Liste in der for-Schleife um (ändert Ihre Liste jedoch nicht "dauerhaft").quelle
[::-1]
erstellt eine flache Kopie, daher ändert sich das Array weder "permanent" noch "temporär".0
wahrscheinlich-1
endet sie am Anfang) ) und Schritt :-1
(iteriert rückwärts durch die Liste, jeweils ein1
Element).reversed()
Wenn Sie den Schleifenindex benötigen und nicht die gesamte Liste zweimal durchlaufen oder zusätzlichen Speicher verwenden möchten, würde ich einen Generator schreiben.
quelle
reversed(xrange(len(L)))
erzeugt die gleichen Indizes wiexrange(len(L)-1, -1, -1)
.for index, item in enumerate(reversed(L)): print len(L)-1-index, item
Es kann so gemacht werden:
Ihre Vermutung war also ziemlich nah :) Ein wenig umständlich, aber es heißt im Grunde: Beginnen Sie mit 1 weniger als
len(collection)
, fahren Sie fort, bis Sie kurz vor -1 in Schritten von -1 ankommen.Zu Ihrer Information, die
help
Funktion ist sehr nützlich, da Sie damit die Dokumente für etwas von der Python-Konsole aus anzeigen können, z.help(range)
quelle
-1
. Ich würde nur sagenreversed(xrange(len(collection)))
Die
reversed
eingebaute Funktion ist praktisch:Die Dokumentation für umgekehrt erklärt die Einschränkungen.
Für die Fälle, in denen ich eine Sequenz zusammen mit dem Index in umgekehrter Reihenfolge durchlaufen muss (z. B. für direkte Änderungen, die die Sequenzlänge ändern), habe ich diese Funktion für mein Codeutil-Modul definiert:
Dieser vermeidet das Erstellen einer Kopie der Sequenz. Offensichtlich
reversed
gelten die Einschränkungen weiterhin.quelle
Wie wäre es, wenn Sie keine neue Liste erstellen, indem Sie Folgendes indizieren:
ODER
quelle
ODER
quelle
Ich mag den Einzeiler-Generator-Ansatz:
quelle
Sie können auch die Funktionen "Bereich" oder "Zählen" verwenden. Wie folgt:
Sie können "count" auch aus itertools wie folgt verwenden:
quelle
3 foo\n2 bar\n1 baz
Verwenden Sie
list.reverse()
und iterieren Sie dann wie gewohnt.http://docs.python.org/tutorial/datastructures.html
quelle
Ein Ansatz ohne Importe:
oder
quelle
quelle
für was auch immer es wert ist, du kannst es auch so machen. sehr einfach.
quelle
print a[-(x+1)]
vermeiden, den Index im Hauptteil der Schleife neu zuzuweisen.Ein ausdrucksstarker Weg, um
reverse(enumerate(collection))
in Python 3 zu erreichen :in Python 2:
Ich bin mir nicht sicher, warum wir dafür keine Abkürzung haben, z.
oder warum wir nicht haben
reversed_range()
quelle
Wenn Sie den Index benötigen und Ihre Liste klein ist, ist es am besten zu lesen,
reversed(list(enumerate(your_list)))
wie in der akzeptierten Antwort angegeben. Aber dies erstellt eine Kopie der Liste, so dass , wenn Ihre Liste wird einen großen Teil Ihres Speichers Aufnahme finden Sie den Index zurück abziehen müssenenumerate(reversed())
auslen()-1
.Wenn Sie es nur einmal tun müssen:
oder wenn Sie dies mehrmals tun müssen, sollten Sie einen Generator verwenden:
quelle
Die Umkehrfunktion ist hier praktisch:
quelle
Sie können auch eine
while
Schleife verwenden:quelle
Sie können einen negativen Index in einer normalen for-Schleife verwenden:
Verwenden Sie Folgendes, um auf den Index zuzugreifen, als würden Sie eine umgekehrte Kopie der Sammlung vorwärts iterieren
i - 1
:Verwenden Sie Folgendes, um auf den ursprünglichen, nicht umgekehrten Index zuzugreifen
len(collection) - i
:quelle
Wenn es Ihnen nichts ausmacht, dass der Index negativ ist, können Sie Folgendes tun:
quelle
Ich denke, der eleganteste Weg ist, den folgenden Generator zu transformieren
enumerate
und zureversed
verwendenDies erzeugt eine Umkehrung des
enumerate
IteratorsBeispiel:
Ergebnis:
quelle
Die anderen Antworten sind gut, aber wenn Sie als Listenverständnisstil tun möchten
quelle
So verwenden Sie negative Indizes: Beginnen Sie bei -1 und treten Sie bei jeder Iteration um -1 zurück.
quelle
Ein einfacher Weg:
quelle
Ich denke, dies ist auch eine einfache Möglichkeit, dies zu tun ... vom Ende zu lesen und bis zur Länge der Liste weiter zu dekrementieren, da wir niemals den "End" -Index ausführen und daher auch -1 hinzufügen
quelle
Angenommen, die Aufgabe besteht darin, das letzte Element zu finden, das eine bestimmte Bedingung in einer Liste erfüllt (dh zuerst, wenn Sie rückwärts schauen), erhalte ich folgende Zahlen:
Die hässlichste Option
xrange(len(xs)-1,-1,-1)
ist also die schnellste.quelle
Sie können einen Generator verwenden:
endlich:
hoffe das hilft dir
quelle