48 votes

Python range() avec des strides négatifs

Existe-t-il un moyen d'utiliser le range() avec stride -1 ?

Par exemple, en utilisant range(10, -10) au lieu des valeurs entre crochets ci-dessous ?

C'est-à-dire la ligne suivante :

for y in range(10,-10)

Au lieu de

for y in [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]:

Il est évident que l'on pourrait faire cela avec un autre type de boucle de manière plus élégante mais la range() exemple fonctionnerait beaucoup mieux pour ce que je veux.

72voto

Useless Points 18909

Vous pouvez spécifier le stride (y compris un stride négatif) comme troisième argument, ainsi

range(10,-11,-1)

donne

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10] 

En général, cela ne coûte rien d'essayer. Vous pouvez simplement taper ceci dans l'interpréteur et voir ce que cela donne.

C'est tout documenté ici comme :

range(start, stop[, step])

mais je voudrais surtout vous encourager à jouer et à voir ce qui se passe. Comme vous pouvez le voir, votre intuition était juste.

7 votes

Vous avez probablement raison, c'est une faiblesse. Peut-être que des encouragements positifs seraient plus appropriés...

0 votes

Je pense que le commentaire est juste. Je l'ai essayé dans l'interpréteur, mais je n'ai pas mis les foulées.

2 votes

Je pense que ce commentaire est tout à fait juste - mentionner le range() builtin mais sans prendre la peine de lire la documentation était inutile. Ce qu'il voulait était juste là.

9voto

Michael Foukarakis Points 14892

Oui, en définissant une étape :

for i in range(10, -11, -1):
    print(i)

7voto

Nayuki Minase Points 3545

En plus des autres bonnes réponses, il existe une alternative :

for y in reversed(range(-10, 11)):

Voir la documentation de reversed() .

6voto

SMALL Points 61

Vous pouvez remarquer que la fonction Range ne fonctionne que dans l'ordre croissant sans le troisième paramètre. Si vous l'utilisez sans le troisième paramètre dans le bloc range, elle ne fonctionnera pas.

for i in range(10,-10)

La boucle ci-dessus ne fonctionnera pas. Pour que la boucle ci-dessus fonctionne, vous devez utiliser la fonction

for i in range(10,-10,-1)

2voto

Niek Bergman Points 156

Oui, mais vous devrez spécifier que vous voulez reculer en mettant l'argument step à -1.

Utilisez :

for y in range(10, -10, -1)

1 votes

Malheureusement, cela n'imprime pas -10... cela va de 10 à -9.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X