89 votes

Comment inverser des tuples en Python ?

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.

162voto

tobyodavies Points 7815

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 !

25voto

Praveen Gollakota Points 8440

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

7voto

Levon Points 34085

De la même manière que vous inverseriez une liste, c'est-à-dire s[::-1]

In [20]: s = (1, 2, 3)

In [21]: s[::-1]
Out[21]: (3, 2, 1)

et

In [24]: for i in s[::-1]:
   ....:     print i
   ....:
3
2
1

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