这可能吗?没有必要到位,只是想找到一种方法来反转一个元组,这样我就可以向后迭代它。
答案 0 :(得分:112)
有两种惯用方法可以做到这一点:
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中的性能通常是令人惊讶的,所以测量它!
答案 1 :(得分:14)
您可以使用reversed
内置功能。</ p>
>>> 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
答案 2 :(得分:6)
类似于反转列表的方式,即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