Ответ 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 часто удивительно, поэтому измерьте это!