84

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

这可能吗?不必就位,只需寻找一种反转元组的方法,以便我可以向后迭代它。

4

3 回答 3

158

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

reversed(x)  # returns an iterator

或者

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

由于元组是不可变的,因此无法就地反转元组。


编辑: 基于@lvc 的评论,返回的迭代器reversed相当于

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

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

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

于 2012-04-18T02:30:34.003 回答
25

您可以使用reversed内置函数。

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

如果你只是想对元组进行迭代,你可以直接使用返回的迭代器,reversed而无需再次将其转换为元组。

>>> for k in reversed(x):
...     print(k)
... 
4 3 2 1
于 2012-04-18T02:30:46.180 回答
7

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

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

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

In [24]: for i in s[::-1]:
   ....:     print i
   ....:
3
2
1
于 2012-04-18T02:31:19.853 回答