Ich versuche, den von enumerate
angegebenen Index umzukehren, während ich die ursprüngliche Reihenfolge der aufgezählten Liste beibehalte.
Angenommen, ich habe Folgendes:
%Vor%Wenn ich das aufzählen würde, würde ich folgendes bekommen:
%Vor%Allerdings möchte ich den von enumerate angegebenen Index umkehren, damit ich bekomme:
%Vor%Bisher habe ich den folgenden Code:
%Vor%Ich habe mich nur gefragt, ob es einen besseren Weg dafür gibt?
Ich weiß nicht, ob diese Lösung für Sie besser ist, aber zumindest ist es kürzer:
%Vor%Nehmen Sie einfach die Länge Ihrer Liste und subtrahieren Sie den Index von ...
%Vor%Oder wenn Sie wirklich einen Generator brauchen:
%Vor% enumerate()
kann dies unmöglich tun, da es mit generischen Iteratoren funktioniert. Zum Beispiel können Sie ihm unendliche Iteratoren übergeben, die nicht einmal einen "umgekehrten Index" haben.
Tatsächlich verwende ich die gleiche Logik wie @RemcoGerlich, aber ich benutze list comprehension
direkt, wodurch der Code jetzt 1-linig wird:
Bezüglich des Dilemmas, generator
oder list comprehension
zu wählen, hier der vorgeschlagene Weg:
Verwenden Sie im Prinzip einen Generatorausdruck, wenn Sie nur einmal iterieren. Wenn Sie die generierten Ergebnisse speichern und verwenden möchten, sind Sie wahrscheinlich mit einem Listenverständnis besser dran.
Wenn Sie davon ausgehen, dass Ihre Liste nicht lang ist und keine Performance-Fehler auftreten, können Sie list(enumerate(range(5)[::-1]))[::-1]
verwenden.
Test:
>>> list(enumerate(range(5)[::-1]))[::-1]
[(0, 4), (1, 3), (2, 2), (3, 1), (4, 0)]
Wenn Sie es mehrmals verwenden möchten, können Sie Ihren eigenen Generator erstellen:
%Vor%oder
%Vor%Tags und Links python python-3.x reverse enumerate