Frage zu "range" - Runterzählen lassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Mittwoch 23. April 2014, 21:30

Hallo liebe Python Gemeinde,
ich möchte dieses mal gerne Zahlen nicht von null nach x hochzählen lassen sondern von einer bestimmten Zahl runterzählen lassen und dann soll bei einer Zahl angehalten werden und das in einem Intervall. Klingt an sich logisch und funktioniert beim raufzählen auch perfekt nur beim runterzählen, gibt er mir eine leere Liste zurück. Was muss ich beachten, damit das funktioniert?

Code: Alles auswählen


def funktion():
    L = [ ]
    for i in range(100, 20, 5):
        L.append(i)
    return L 
    
    
BlackJack

Mittwoch 23. April 2014, 21:38

@duodiscus: Das dritte Argument gibt an wie viel bei jedem Durchlauf addiert werden soll. Wenn Du runterzählen willst, musst Du negative Werte addieren.

Letztlich finde ich persönlich es lesbarer immer nur hochzählende `range()`/`xrange()` zu verwenden und die `reversed()`-Funktion zu verwenden. Dann muss man sich weder bei der Schrittweite noch bei der Endzahl Gedanken machen.

Das liesse sich übrigens auch deutlich kompakter ausdrücken wenn man die `list()`-Funktion verwendet statt erst eine leere Liste zu erstellen, und die dann in einer Schleife mit Werten zu füllen (Python 2):

Code: Alles auswählen

In [8]: list(reversed(xrange(25, 101, 5)))
Out[8]: [100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25]
Bei Python 3 dann `range()` statt `xrange()`.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Mittwoch 23. April 2014, 22:04

Danke für die ausführliche Antwort. Ich habe deinen Tipp übernommen und es auch mit dem reversed Befehl gemacht. Dein Vorschlag ist natürlich deutlich weniger Code - das ist wohl so :wink:
wirrbel
User
Beiträge: 2
Registriert: Donnerstag 1. Mai 2014, 12:04

Donnerstag 1. Mai 2014, 12:10

Es ist auch möglich als Schrittweite eine negative Zahl anzugeben:

Code: Alles auswählen

In [3]: [i for i in xrange(100, 20, -5)]
Out[3]: [100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 1. Mai 2014, 13:25

wirrbel hat geschrieben:Es ist auch möglich als Schrittweite eine negative Zahl anzugeben:
Das hatte BlackJack ja auch schon erwähnt... ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
Antworten