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--)
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--)
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.
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
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.