2010-11-27 5 views
57

ich könnte falsch sein (lass es mich wissen und ich werde die Frage löschen), aber es scheint PythonAbnehmen für Schleifen in Python unmöglich?

nicht reagiert
for n in range(6,0): 
    print n 

Ich versuchte xrange mit und es hat nicht funktioniert. Wie kann ich das umsetzen?

+0

Aus Neugier, verwenden Sie das für alles? Es ist ziemlich ungewöhnlich, diese Funktionalität zu benötigen! – katrielalex

+0

@katrielalex Ich verwende es, um über eine Matrix von rechts nach links zu iterieren. Gibt es eine andere Art, wie du vorschlägst, dass ich es tun sollte? – Gal

+0

Sie könnten versuchen, 'für i in umgekehrter (Matte):' obwohl das möglicherweise langsamer – katrielalex

Antwort

128
for n in range(6,0,-1): 
    print n 
# prints [6, 5, 4, 3, 2, 1] 
+6

Betcha OP wollte eigentlich 'Bereich (5, -1, -1)'. Obwohl er das wahrscheinlich durch Versuch und Irrtum herausfinden konnte. – kojiro

3
for n in range(6,0,-1): 
    print n 
2
>>> range(6, 0, -1) 
[6, 5, 4, 3, 2, 1] 
25

Das ist sehr spät, aber ich wollte nur hinzufügen, dass es eine elegantere Weg ist: mit reversed

for i in reversed(range(10)): 
    print i 

gibt:

4 
3 
2 
1 
0 
+0

Was ist elegant daran? Sie verbringen Zeit damit, eine Liste umzukehren, anstatt sie so zu erzeugen, wie Sie es wollen. – alexis

+0

Ich meinte, es ist sofort klar, was getan wird – pratikm

+1

@alexis es kostet nichts. Sie erhalten "reversed (range)" kostenlos, da die in CPython integrierte Optimierung ['range_reverse'] (https://github.com/python-git/python/blob/master/Objects/rangeobject.c#L151) optimiert ist . Ich habe einige schnelle Benchmarks durchgeführt und konnte in Python 2.7 und 3.3 keinen signifikanten Kostenunterschied zwischen 'step = -1 'und' reversed() 'finden. Beachten Sie auch, dass [dieses Idiom in heapq verwendet wird] (http://hg.python.org/cpython/file/3.3/Lib/heapq.py#l179). – kojiro

5
for n in range(6,0,-1) 

Dies würde Ihnen 6,5,4,3,2,1

Was

for n in reversed(range(0,6)) 

würde Ihnen 5,4,3,2,1,0

+0

Dies ist die beste Antwort! – LCoelho

1

0 bedingten Wert, wenn diese Bedingung erfüllt ist, Schleife executing.10 halten, ist der Anfangswert. 1 ist der Modifikator, in dem eine einfache Dekrementierung erfolgen kann.

for number in reversed(range(0,10,1)): 
print number;