1351 Stimmen

Wie kann man eine Liste umkehren?

Wie kann ich in Python rückwärts über eine Liste iterieren?

array = [0, 10, 20, 40]
for (i = array.length() - 1; i >= 0; i--)

31voto

SimonM Punkte 439

Die Verwendung von Slicing, z.B. array = array[::-1], ist ein netter Trick und sehr pythonisch, aber für Neulinge vielleicht ein wenig undurchsichtig. Die Verwendung der reverse()-Methode ist ein guter Weg, um in der täglichen Programmierung zu gehen, weil es leicht lesbar ist.

Wenn Sie jedoch eine Liste umkehren müssen, wie z. B. in einer Frage für ein Vorstellungsgespräch, können Sie wahrscheinlich nicht auf diese integrierten Methoden zurückgreifen. Der Interviewer wird eher darauf achten, wie Sie das Problem angehen, als auf die Tiefe Ihrer Python-Kenntnisse; ein algorithmischer Ansatz ist erforderlich. Das folgende Beispiel, bei dem ein klassischer Swap verwendet wird, könnte eine Möglichkeit sein, dies zu tun

def reverse_in_place(lst):      # Declare a function
    size = len(lst)             # Get the length of the sequence
    hiindex = size - 1
    its = size/2                # Number of iterations required
    for i in xrange(0, its):    # i is the low index pointer
        temp = lst[hiindex]     # Perform a classic swap
        lst[hiindex] = lst[i]
        lst[i] = temp
        hiindex -= 1            # Decrement the high index pointer
    print "Done!"

# Now test it!!
array = [2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]

print array                    # Print the original sequence
reverse_in_place(array)        # Call the function passing the list
print array                    # Print reversed list

**The result:**
[2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
Done!
[654, 124, 24, 7, 1, 65, 60, 32, 27, 25, 19, 12, 9, 8, 5, 2]

Beachten Sie, dass dies bei Tuples oder String-Sequenzen nicht funktioniert, da Strings und Tuples unveränderlich sind, d.h. Sie können nicht in sie schreiben, um Elemente zu ändern.

22voto

Chris_Rands Punkte 34669

Ich finde (im Gegensatz zu einigen anderen Vorschlägen), dass l.reverse() ist bei weitem der schnellste Weg, eine lange Liste in Python 3 und 2 umzukehren. Ich wäre interessiert zu wissen, ob andere diese Zeiten replizieren können.

l[::-1] ist wahrscheinlich langsamer, weil es die Liste kopiert, bevor es sie umkehrt. Das Hinzufügen der list() Aufruf um den Iterator herum, der von reversed(l) muss ein gewisser Overhead entstehen. Wenn Sie eine Kopie der Liste oder einen Iterator wünschen, verwenden Sie natürlich die entsprechenden Methoden, aber wenn Sie die Liste nur umkehren wollen, dann l.reverse() scheint der schnellste Weg zu sein.

Funktionen

def rev_list1(l):
    return l[::-1]

def rev_list2(l):
    return list(reversed(l))

def rev_list3(l):
    l.reverse()
    return l

Liste

l = list(range(1000000))

Python 3.5 Zeitpläne

timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44

Python 2.7 Zeitpläne

timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46

18voto

Swiss Punkte 5339
for x in array[::-1]:
    do stuff

17voto

Eyal Levin Punkte 13427

reversed y list :

>>> list1 = [1,2,3]
>>> reversed_list = list(reversed(list1))
>>> reversed_list
>>> [3, 2, 1]

11voto

nonopolarity Punkte 138211
array=[0,10,20,40]
for e in reversed(array):
  print e

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