Python aufzählen reverse-index nur
Bin ich versucht, umzukehren, den index gegeben durch enumerate
unter Beibehaltung der ursprünglichen Reihenfolge der Liste aufgezählt werden.
Angenommen ich habe Folgendes:
>> range(5)
[0, 1, 2, 3, 4]
Wenn ich aufzählen, dies würde ich Folgendes erhalten:
>> list(enumerate(range(5)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
Möchte ich aber Umgekehrt den index zur Verfügung gestellt, indem Sie auflisten, so dass ich erhalte:
[(4, 0), (3, 1), (2, 2), (1, 3), (0, 4)]
Bisher habe ich folgenden code:
reversed(list(enumerate(reversed(range(5)))))
Ich wurde gerade gefragt ob es ein eleganter Weg, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie über die Verwendung von zip-statt mit einem umgekehrten Bereich?
Als @julienSpronk schlägt vor, die Verwendung
izip
um einen generator, auchxrange
:itertools.izip
um einen generatorIch weiß nicht, ob diese Lösung für Sie besser ist, aber zumindest ist es kürzer:
Nehmen Sie einfach die Länge Ihrer Liste und subtrahieren Sie den index aus, dass...
Oder wenn Sie wirklich brauchen einen generator:
enumerate()
können möglicherweise nicht diese, wie es funktioniert generische Iteratoren. Zum Beispiel, können Sie geben Sie unendliche Iteratoren, dass nicht einmal eine "reverse index".Angenommen, Ihre Liste ist nicht lang, und Sie wird nicht ausgeführt, in performance-Fehler, nutzen Sie
list(enumerate(range(5)[::-1]))[::-1]
.Test:
>>> list(enumerate(range(5)[::-1]))[::-1]
[(0, 4), (1, 3), (2, 2), (3, 1), (4, 0)]
Eigentlich bin ich mit der gleichen Logik wie @RemcoGerlich hast, aber ich benutze
list comprehension
direkt, die machen den code nun 1-liner:In Bezug auf das dilemma der Wahl
generator
oderlist comprehension
, hier ist die vorgeschlagene Art und Weise:Wenn du gehst, zu re-verwenden Sie es mehrmals, können Sie Ihre eigenen generator:
oder
Verwenden Sie einfach
len(lst)-i
überall, wo ich verwendet. oder:Python 2
Python 3
Ersatz
zip
füritertools.izip
🙂Erklärung: