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.
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!
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
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