Python zählt nach unten oder mit einem benutzerdefinierten Schritt auf

8

Wie macht man Pythons enumerate -Funktion zum Aufzählen von größeren Zahlen zu kleineren (absteigend) ordnen, dekrementieren, zählen)? Oder im Allgemeinen, wie man unterschiedliche Schrittinkremente / -dekremente in enumerate ?

benutzt

Beispielsweise würde eine solche Funktion, die auf die Liste ['a', 'b', 'c'] mit dem Startwert 10 und dem Schritt -2 angewendet wird, den Iterator [(10, 'a'), (8, 'b'), (6, 'c')] erzeugen.

    
Mirzhan Irkegulov 18.06.2014, 15:54
quelle

3 Antworten

8

Ich habe keinen eleganteren, idiomatischen und prägnanten Weg gefunden, als einen einfachen Generator zu schreiben:

%Vor%

Beispiele:

%Vor%

Wenn Sie den obigen Code nicht verstehen, lesen Sie Was bewirkt das Schlüsselwort "yield"? in Python? und Unterschiede zwischen Pythons Generatoren und Iteratoren .

    
Mirzhan Irkegulov 18.06.2014, 15:54
quelle
3

Eine Option ist zip iterbar zu range :

%Vor%

Dies hat die Einschränkung, dass Sie wissen müssen, wie weit range gehen soll (das Minimum, das es abdecken sollte - wie in meinem Beispiel wird der Überschuss um zip gekürzt).

Wenn Sie nicht wissen, können Sie Ihre eigene "unendliche range " rollen und verwenden Sie diese:

%Vor%     
jonrsharpe 18.06.2014 16:02
quelle
0

Eine weitere Option ist die Verwendung von itertools.count , was beim "Aufzählen" durch einen Schritt in rückwärts hilfreich ist.

%Vor%

Eigenschaften

  • prägnant
  • Die Schritt- und Richtungslogik ist kompakt in count()
  • gespeichert
  • aufgezählte Indizes werden mit next() iteriert
  • count() ist von Natur aus unendlich; nützlich, wenn die Terminalgrenze unbekannt ist (siehe @jonrsharpe)
  • Die Sequenzlänge beendet intrinsisch den unendlichen Iterator
pylang 24.11.2016 16:43
quelle

Tags und Links