1053 Stimmen

Durchlaufen einer Liste in umgekehrter Reihenfolge in Python

Ich kann also beginnen mit collection[len(collection)-1] und enden mit collection[0] .

Ich möchte auch auf den Schleifenindex zugreifen können.

5voto

Boris V Punkte 10136

Wenn Sie den Index benötigen und Ihre Liste klein ist, ist die lesbarste Methode reversed(list(enumerate(your_list))) wie die akzeptierte Antwort besagt. Aber dies erzeugt eine Kopie Ihrer Liste. Wenn Ihre Liste also einen großen Teil Ihres Speichers einnimmt, müssen Sie den Index subtrahieren, der von enumerate(reversed()) de len()-1 .

Wenn Sie es nur einmal tun müssen:

a = ['b', 'd', 'c', 'a']

for index, value in enumerate(reversed(a)):
    index = len(a)-1 - index

    do_something(index, value)

oder wenn Sie dies mehrmals tun müssen, sollten Sie einen Generator verwenden:

def enumerate_reversed(lyst):
    for index, value in enumerate(reversed(lyst)):
        index = len(lyst)-1 - index
        yield index, value

for index, value in enumerate_reversed(a):
    do_something(index, value)

4voto

jss367 Punkte 3707

Wenn es Ihnen nichts ausmacht, dass der Index negativ ist, können Sie das tun:

>>> a = ["foo", "bar", "baz"]
>>> for i in range(len(a)):
...     print(~i, a[~i]))
-1 baz
-2 bar
-3 foo

4voto

CervEd Punkte 1487

Ich denke, der eleganteste Weg ist die Umwandlung enumerate y reversed unter Verwendung des folgenden Generators

(-(ri+1), val) for ri, val in enumerate(reversed(foo))

die eine Umkehrung der enumerate Iterator

foo = [1,2,3]
bar = [3,6,9]
[
    bar[i] - val
    for i, val in ((-(ri+1), val) for ri, val in enumerate(reversed(foo)))
]

Ergebnis:

[6, 4, 2]

3voto

bchhun Punkte 17426

Die Umkehrfunktion ist hier sehr nützlich:

myArray = [1,2,3,4]
myArray.reverse()
for x in myArray:
    print x

2voto

Yuval A. Punkte 5405

Sie können auch eine while Schleife:

i = len(collection)-1
while i>=0:
    value = collection[i]
    index = i
    i-=1

CodeJaeger.com

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.

Powered by:

X