Python zählt nur den umgekehrten Index auf

9

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?

    
rozzy 03.08.2016, 08:38
quelle

7 Antworten

9

Wie wäre es mit zip anstelle eines umgekehrten Bereichs?

%Vor%

Wie @julienSpronk vorschlägt, benutze izip , um einen Generator zu erhalten, auch xrange :

%Vor%     
Netwave 03.08.2016, 08:43
quelle
4

Ich weiß nicht, ob diese Lösung für Sie besser ist, aber zumindest ist es kürzer:

%Vor%     
mandrewcito 03.08.2016 08:47
quelle
2

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.

    
RemcoGerlich 03.08.2016 08:42
quelle
2

Tatsächlich verwende ich die gleiche Logik wie @RemcoGerlich, aber ich benutze list comprehension direkt, wodurch der Code jetzt 1-linig wird:

%Vor%

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.

    
MaThMaX 03.08.2016 08:51
quelle
2

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

    
user3036878 03.08.2016 08:50
quelle
0

Wenn Sie es mehrmals verwenden möchten, können Sie Ihren eigenen Generator erstellen:

%Vor%

oder

%Vor%     
Julien Spronck 03.08.2016 08:52
quelle
0

Benutze einfach len(lst)-i überall wo ich benutzt werde. oder:

%Vor%     
John 17.03.2017 00:37
quelle