Возможно ли это? Не нужно быть на месте, просто ищет способ изменить кортеж, чтобы я мог повторять его назад.
Ответ 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