Подтвердить что ты не робот

Как отменить кортежи в Python?

Возможный дубликат:
Пройдите список в обратном порядке в Python

Возможно ли это? Не нужно быть на месте, просто ищет способ изменить кортеж, чтобы я мог повторять его назад.

4b9b3361

Ответ 1

Есть два идиоматических способа сделать это:

reversed(x)  # returns an iterator

или

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

Поскольку кортежи неизменяемы, нет способа отменить кортеж на месте.


Edit: Основываясь на комментарии @lvc, итератор, возвращаемый reversed, будет эквивалентен

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

то есть. он полагается на последовательность, имеющую известную длину, чтобы избежать фактического обращения кортежа.

Что касается более эффективного, я бы предположил, что это будет seq[::-1], если вы используете его все, а кортеж мал, а reversed, когда кортеж велик, но производительность на python часто удивительно, поэтому измерьте это!

Ответ 2

Вы можете использовать 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

Ответ 3

Аналогично тому, как вы отменяете список, т.е. 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