如何在 Python 中反转元组?

这可能吗?不需要放在适当的位置,只需要找到一种方法来反转元组,这样我就可以反向迭代它。

104236 次浏览

There are two idiomatic ways to do this:

reversed(x)  # returns an iterator

or

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

Since tuples are immutable, there is no way to reverse a tuple in-place.


Edit: Building on @lvc's comment, the iterator returned by reversed would be equivalent to

def myreversed(seq):
for i in range(len(x) - 1, -1, -1):
yield seq[i]

i.e. it relies on the sequence having a known length to avoid having to actually reverse the tuple.

As to which is more efficient, i'd suspect it'd be the seq[::-1] if you are using all of it and the tuple is small, and reversed when the tuple is large, but performance in python is often surprising so measure it!

You can use the reversed builtin function.

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

If you just want to iterate over the tuple, you can just use the iterator returned by reversed directly without converting it into a tuple again.

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

Similar to the way you would reverse a list, i.e. s[::-1]

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


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

and

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