How to reverse tuples in Python? [duplicate]

2019-01-23 22:06发布

Possible Duplicate:
Traverse a list in reverse order in Python

Is this possible? Doesn't have to be in place, just looking for a way to reverse a tuple so I can iterate on it backwards.

3条回答
smile是对你的礼貌
2楼-- · 2019-01-23 22:45

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!

查看更多
女痞
3楼-- · 2019-01-23 23:02

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
查看更多
爷、活的狠高调
4楼-- · 2019-01-23 23:07

You can use the reversed builtin function.

>>> x = (1, 2, 3, 4)
>>> y = reversed(x)
>>> tuple(y)
(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
查看更多
登录 后发表回答