Comment inverser les tuples en Python? [dupliquer]
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!
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
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