Duplicata possible :
Traverser une liste en ordre inverse en Python
Est-ce possible ? Il n'est pas nécessaire que ce soit en place, je cherche juste un moyen d'inverser un tuple pour pouvoir itérer dessus à l'envers.
Duplicata possible :
Traverser une liste en ordre inverse en Python
Est-ce possible ? Il n'est pas nécessaire que ce soit en place, je cherche juste un moyen d'inverser un tuple pour pouvoir itérer dessus à l'envers.
Il existe deux façons idiomatiques de procéder :
reversed(x) # returns an iterator
o
x[::-1] # returns a new tuple
Comme les tuples sont immuables, il n'y a aucun moyen d'inverser un tuple sur place.
Editar: Dans le prolongement du commentaire de @lvc, l'itérateur renvoyé par reversed
serait équivalent à
def myreversed(seq):
for i in range(len(x) - 1, -1, -1):
yield seq[i]
c'est-à-dire qu'il s'appuie sur le fait que la séquence a une longueur connue pour éviter d'avoir à inverser le tuple.
Pour ce qui est de savoir ce qui est le plus efficace, je pense que c'est le seq[::-1]
si vous l'utilisez entièrement et que le tuple est petit, et reversed
lorsque le tuple est grand, mais les performances en python sont souvent surprenantes, alors mesurez-les !
Vous pouvez utiliser le reversed
fonction intégrée.
>>> x = (1, 2, 3, 4)
>>> x = tuple(reversed(x))
>>> x
(4, 3, 2, 1)
Si vous souhaitez simplement itérer sur le tuple, vous pouvez utiliser l'itérateur renvoyé par la commande reversed
directement sans le convertir à nouveau en un tuple.
>>> for k in reversed(x):
... print(k)
...
4 3 2 1
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.