如何在Python中反转元组?

Joa*_*nge 58 python iteration loops tuples

可能重复:
在Python中以相反的顺序遍历列表

这可能吗?没有必要到位,只是寻找一种方法来反转一个元组,以便我可以向后迭代它.

tob*_*ies 120

有两种惯用方法可以做到这一点:

reversed(x)  # returns an iterator
Run Code Online (Sandbox Code Playgroud)

要么

x[::-1]  # returns a new tuple
Run Code Online (Sandbox Code Playgroud)

由于元组是不可变的,因此无法在原位反转元组.


编辑: 基于@ lvc的注释,返回的迭代器reversed将等效于

def myreversed(seq):
    for i in range(len(x) - 1, -1, -1):
        yield seq[i]
Run Code Online (Sandbox Code Playgroud)

即它依赖于具有已知长度的序列以避免必须实际反转元组.

至于哪个更高效,我怀疑它是否seq[::-1]如果你正在使用所有它并且元组很小,并且reversed当元组很大时,但是python中的性能通常是令人惊讶的,所以测量它!

  • 如果你真的需要构造一个输出元组,那么你需要将`tuple(reversed(x))`与`x [:: - 1]`进行比较以获得性能.如果您只是想以相反的顺序迭代元素,那么`reversed`有更好的机会显示性能提升. (2认同)

Pra*_*ota 17

您可以使用reversed内置功能.

>>> x = (1, 2, 3, 4)
>>> x = tuple(reversed(x))
>>> x
(4, 3, 2, 1)
Run Code Online (Sandbox Code Playgroud)

如果你只想迭代元组,你可以直接使用迭代返回的迭代器,reversed而不必再将它转换为元组.

>>> for k in reversed(x):
...     print(k)
... 
4 3 2 1
Run Code Online (Sandbox Code Playgroud)


Lev*_*von 6

类似于反转列表的方式,即s [:: - 1]

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

In [21]: s[::-1]
Out[21]: (3, 2, 1)
Run Code Online (Sandbox Code Playgroud)

In [24]: for i in s[::-1]:
   ....:     print i
   ....:
3
2
1
Run Code Online (Sandbox Code Playgroud)