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.

1718voto

Greg Hewgill Punkte 882617

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 enumerate() auf Ihrer Liste, bevor Sie sie an reversed() :

>>> for i, e in reversed(list(enumerate(a))):
...     print(i, e)
... 
2 baz
1 bar
0 foo

Desde enumerate() einen Generator zurückgibt und Generatoren nicht umgedreht werden können, müssen Sie ihn in einen list Erstens.

253voto

mipadi Punkte 377834

Das können Sie tun:

for item in my_list[::-1]:
    print item

(Oder was auch immer Sie in der for-Schleife tun wollen.)

El [::-1] slice kehrt die Liste in der for-Schleife um (ändert die Liste aber nicht wirklich "dauerhaft").

123voto

Alan Rowarth Punkte 1911

Das kann so gemacht werden:

for i in range(len(collection)-1, -1, -1):
    print collection[i]

    # print(collection[i]) for python 3. +

Deine Vermutung war also ziemlich genau :) Ein wenig umständlich, aber im Grunde heißt es: Beginne mit 1 weniger als len(collection) weiter, bis Sie kurz vor -1 sind, in Schritten von -1.

Zu Ihrer Information, die help Funktion ist sehr nützlich, da sie es Ihnen ermöglicht, die Dokumentationen für etwas von der Python-Konsole aus einzusehen, z.B:

help(range)

80voto

Kenan Banks Punkte 196831

Wenn Sie den Schleifenindex benötigen und nicht die gesamte Liste zweimal durchlaufen oder zusätzlichen Speicher verwenden wollen, würde ich einen Generator schreiben.

def reverse_enum(L):
   for index in reversed(xrange(len(L))):
      yield index, L[index]

L = ['foo', 'bar', 'bas']
for index, item in reverse_enum(L):
   print index, item

45voto

Kenan Punkte 11628

Ein Ansatz ohne Importe:

for i in range(1,len(arr)+1):
    print(arr[-i])

oder, dieser Ansatz wird eine neue Liste im Speicher erstellen, also seien Sie vorsichtig mit großen Listen

for i in arr[::-1]:
    print(i)

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