Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Inversion de range() ?

8 réponses
Avatar
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

8 réponses

Avatar
Christophe
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

Avatar
Pierre Maurette

[...]

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

Avatar
Bruno Desthuilliers
(snip)
reversed a ete ajoute dans Python 2.5


Dans Python 2.4. Avec sorted etc...

Avatar
Pierre Maurette
(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


Avatar
Christophe
(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.



Avatar
Bruno Desthuilliers
(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.



Avatar
kaerbuhez
In [4]: range(5,0,-1)
Out[4]: [5, 4, 3, 2, 1]
Avatar
Bruno Desthuilliers
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>