Comment inverser les tuples en Python? [dupliquer]

possibilité de dupliquer:

parcourir une liste dans L'ordre inverse en Python

est-ce possible? Il n'a pas besoin d'être en place, je cherche juste un moyen d'inverser un tuple pour que je puisse itérer à l'envers.

46
demandé sur Community 2012-04-18 06:28:44

3 réponses

il y a deux façons idiomatiques de faire ceci:

reversed(x)  # returns an iterator

ou

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

puisque les tuples sont immuables, il n'y a aucun moyen d'inverser un tuple en place.


modifier: En s'appuyant sur le commentaire de @lvc, l'itérateur retourné 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 la séquence ayant une longueur connue pour éviter ayant à renverser le tuple.

quant à savoir lequel est le plus efficace, je pense que ce serait le seq[::-1] si vous utilisez tout cela et le tuple est petit, et reversed quand le tuple est grand, mais la performance en python est souvent surprenante alors mesurez-le!

103
répondu tobyodavies 2012-06-18 05:37:30

vous pouvez utiliser la fonction reversed .

>>> x = (1, 2, 3, 4)
>>> y = reversed(x)
>>> tuple(y)
(4, 3, 2, 1)

si vous voulez juste itérer sur le tuple, vous pouvez juste utiliser l'itérateur retourné par reversed directement sans le convertir dans un tuple à nouveau.

>>> for k in reversed(x):
...     print k,
... 
4 3 2 1
12
répondu Praveen Gollakota 2012-04-18 02:30:46

similaire à la façon dont vous inverseriez une liste, i.e. 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
répondu Levon 2012-04-18 02:31:19