3 votes

Peut-on itérer un nombre à l'envers sans utiliser de liste ?

Comment itérer un nombre à l'envers sans utiliser de liste dans Python 3 ?

En utilisant des listes, je ferais probablement quelque chose comme :

li = list(range(100))
for i in li[::-1]:
    print(i)

C'est une bonne solution, mais elle ne fonctionne pas avec les grands nombres. Pour l'instant, j'essaie d'itérer un nombre à l'envers avec de grands nombres, mais une erreur de débordement se produit. Je pense donc que je dois trouver un moyen d'itérer un nombre à l'envers sans utiliser de listes.

Y a-t-il un moyen ?

11voto

Sven Marnach Points 133943

Les itérateurs qui fournissent les __reversed__() La méthode spéciale prend également en charge l'itération inversée. Dans Python 3.x, range() disposent de cette méthode, vous pouvez donc également utiliser les itérateurs

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

Dans Python 2.x, xarnge() permet l'itération inversée :

for i in reversed(xrange(100)):
    print i

Les deux versions ne stockent pas toute la liste en mémoire.

2voto

En général ? Non. Le protocole itérateur de Python ne prend en charge que l'itération vers l'avant. (Edit : Ceci s'est avéré incorrect, voir la réponse de Sven Marnach).

Toutefois, vous pouvez inverser range(n, m) : range(m-1, n-1, -1) (les -1 sont laids, certes, mais c'est nécessaire en raison de la présence de range qui renvoie à une plage semi-ouverte).

1voto

Andrew White Points 23508

Essayez d'utiliser la gamme]et de descendre d'un cran...

for i in range(100, 0, -1):

[mise à jour] Je viens de remarquer que vous avez parlé de Python 3, auquel cas vous pouvez utiliser range au lieu de xrange.

1voto

wnoise Points 6448
for i in range(10,0,-1):
    print(i)

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