web-dev-qa-db-ja.com

Pythonでタプルを逆にする方法は?

可能性のある複製:
Pythonでリストを逆順にトラバースする

これは可能ですか?タプルを逆方向​​に反復できるように、タプルを逆にする方法を探しているだけで、所定の場所にある必要はありません。

55
Joan Venge

これを行うには、2つの慣用的な方法があります。

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でのパフォーマンスはしばしば驚くので、測定してください!

115
tobyodavies

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
16

リストを逆にする方法と同様、つまり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
6
Levon