2010-11-27 20 views
57

Je peux me tromper (juste faites-moi savoir et je vais supprimer la question), mais il semble python ne répondra pas àDiminuer pour les boucles en Python impossible?

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

J'ai essayé d'utiliser xrange et il ne fonctionne pas non plus. Comment puis-je l'implémenter?

+0

Par curiosité, utilisez-vous ceci pour quelque chose? Il est plutôt rare d'avoir besoin de cette fonctionnalité! – katrielalex

+0

@katrielalex Je l'utilise pour itérer sur une matrice de droite à gauche. Y a-t-il une façon différente de suggérer que je devrais le faire? – Gal

+0

vous pouvez essayer 'pour i en inversé (mat):' bien que cela pourrait être plus lent – katrielalex

Répondre

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

Betcha OP voulait réellement 'range (5, -1, -1)'. Bien qu'il pourrait probablement comprendre cela à partir d'essais et erreurs. – kojiro

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

Ceci est très en retard, mais je voulais juste ajouter qu'il ya une façon plus élégante: en utilisant reversed

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

donne:

4 
3 
2 
1 
0 
+0

Qu'est-ce qui est élégant à ce sujet? Vous passez du temps à inverser une liste au lieu de la générer comme vous le souhaitez. – alexis

+0

Je voulais dire qu'il est immédiatement clair ce qui est fait – pratikm

+1

@alexis cela ne coûte rien. Vous obtenez 'reverse (range)' gratuitement en raison de l'optimisation ['range_reverse'] (https://github.com/python-git/python/blob/master/Objects/rangeobject.c#L151) construite dans CPython . J'ai fait quelques tests rapides et je n'ai pas trouvé de différence de coût significative entre 'step = -1' et' reverse() 'dans Python 2.7 et 3.3. Notez également que [cet idiome est utilisé dans heapq] (http://hg.python.org/cpython/file/3.3/Lib/heapq.py#l179). – kojiro

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

Cela vous donne 6,5,4,3,2,1

Quant à

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

vous donnerait 5,4,3,2,1,0

+0

C'est la meilleure réponse! – LCoelho

1

0 est valeur conditionnelle lorsque cette condition est vraie, la boucle gardera executing.10 est la valeur initiale. 1 est le modificateur où peut être simple décrément.

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