web-dev-qa-db-fra.com

Comment inverser les tuples en Python?

Duplicata possible:
Parcourez une liste dans l'ordre inverse en Python

Est-ce possible? Ne doit pas être en place, je cherche juste un moyen d'inverser un Tuple pour que je puisse l'itérer en arrière.

55
Joan Venge

Il existe deux façons idiomatiques de procéder:

reversed(x)  # returns an iterator

ou

x[::-1]  # returns a new Tuple

Étant donné que les tuples sont immuables, il n'y a aucun moyen d'inverser un tuple en place.


Edit: En s'appuyant sur le 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 repose sur la séquence ayant une longueur connue pour éviter d'avoir à inverser réellement le tuple.

Quant à ce qui est plus efficace, je soupçonne que ce serait 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-le!

115
tobyodavies

Vous pouvez utiliser la fonction intégrée reversed.

>>> x = (1, 2, 3, 4)
>>> x = Tuple(reversed(x))
>>> x
(4, 3, 2, 1)

Si vous voulez simplement parcourir le Tuple, vous pouvez simplement utiliser l'itérateur renvoyé par reversed directement sans le reconvertir en Tuple.

>>> for k in reversed(x):
...     print(k)
... 
4 3 2 1
16
Praveen Gollakota

Semblable à la façon dont 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
6
Levon