Inversion de range() ?

Le
Pierre Maurette
Bonjour,

Si je veux parcourir un range(0, n) par exemple en sens inverse, il me
faudrait utiliser range(n - 1, -1, -1). Ce que je trouve tout à fait
illisible.
Déjà, je ne suis pas convaincu par le fait que le range() doit un
intervalle semi-ouvert [n1, n2[. Personnellemnt, je dis bien
personnellement, avec mes habitudes, je préfèrerais écrire, pour
parcourir une liste de len() n:
for i in range(0, n-1):
Mais une fois admis que c'était:
for i in range(0, n):
Je trouverais plus simple pour le sens inverse d'écrire un truc du
genre:
for i in range(0, n).down():
que:
for i in range(n - 1, -1, -1):
qui ne me parle pas du tout. Et risque d'erreur.
En écrivant le message, j'ai testé ça:
for i in range(0, n)[::-1]:
qui marche.
Je laisse quend même la question

Bonne journée

--
Pierre Maurette
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christophe
Le #682414
Bonjour,

Si je veux parcourir un range(0, n) par exemple en sens inverse, il me
faudrait utiliser range(n - 1, -1, -1). Ce que je trouve tout à fait
illisible.
Déjà, je ne suis pas convaincu par le fait que le range() doit un
intervalle semi-ouvert [n1, n2[. Personnellemnt, je dis bien
personnellement, avec mes habitudes, je préfèrerais écrire, pour
parcourir une liste de len() n:
for i in range(0, n-1):
Mais une fois admis que c'était:
for i in range(0, n):
Je trouverais plus simple pour le sens inverse d'écrire un truc du genre:
for i in range(0, n).down():
que:
for i in range(n - 1, -1, -1):
qui ne me parle pas du tout. Et risque d'erreur.
En écrivant le message, j'ai testé ça:
for i in range(0, n)[::-1]:
qui marche.
Je laisse quend même la question...


reversed a ete ajoute dans Python 2.5 pour ce genre de cas.

for i in reversed(range(n)):
pass

Pierre Maurette
Le #682413

[...]

reversed a ete ajoute dans Python 2.5 pour ce genre de cas.

for i in reversed(range(n)):
pass


Merci. Effectivement reversed() fonctionne. Ça renvoie un iterator, ce
qui convient. Python 2.5 est encore aujourd'hui une légère contrainte.
Peut-être laisser à range(n)[::-1] pour l'instant ? (et je n'avais même
pas pensé à écrire range(n) au lieu de range(0, n) !)

--
Pierre Maurette

Bruno Desthuilliers
Le #682412
(snip)
reversed a ete ajoute dans Python 2.5


Dans Python 2.4. Avec sorted etc...

Pierre Maurette
Le #682161
(snip)
reversed a ete ajoute dans Python 2.5


Dans Python 2.4. Avec sorted etc...


Effectivment:
sorted(range(n), reverse=True)
fonctionne. Mais je ne sais pas si l'interprêteur est assez subtil pour
savoir qu'il n'a pas besoin de trier un range() ?

--
Pierre Maurette


Christophe
Le #682160
(snip)
reversed a ete ajoute dans Python 2.5


Dans Python 2.4. Avec sorted etc...



C'est vrai.

Effectivment:
sorted(range(n), reverse=True)
fonctionne. Mais je ne sais pas si l'interprêteur est assez subtil pour
savoir qu'il n'a pas besoin de trier un range() ?


Ah mais ce n'est pas tout à fait ce que Bruno voulait dire. reversed a
été ajouté dans Python 2.4, pas dans 2.5. Il a été ajouté en même temps
que sorted de fait.

C'est ma faute, j'aurais du me souvenir que mon raccourci pour lancer un
interpreteur Python pointait toujours sur mon installation de Python 2.4
et non pas 2.5.



Bruno Desthuilliers
Le #682159
(snip)
reversed a ete ajoute dans Python 2.5


Dans Python 2.4. Avec sorted etc...


Effectivment:
sorted(range(n), reverse=True)


Actuellement, je pensais oplutôt à:

for x in reversed(range(5)):
print x

fonctionne. Mais je ne sais pas si l'interprêteur est assez subtil


s/interpreter/implémentation de sorted/

pour
savoir qu'il n'a pas besoin de trier un range() ?


Ce que sorted reçoit, c'est une liste. Donc la question est de savoir si
sorted est capable de repérer qu'une liste est triée. Sur ce genre de
point, je ferais plus confiance à tes compétences en algo qu'à ma
connaissance de l'implémentation de Python pour savoir si c'est possible
sans un surcoût trop important pour que ça en vaille la peine.



kaerbuhez
Le #684020
In [4]: range(5,0,-1)
Out[4]: [5, 4, 3, 2, 1]
Bruno Desthuilliers
Le #684014
In [4]: range(5,0,-1)
Out[4]: [5, 4, 3, 2, 1]


<mode="mauvaise foi">
Evidémment, si tu lis la doc, c'est trop facile !
</mode>

Publicité
Poster une réponse
Anonyme