2012-04-18 11 views
36

可能性の重複:
Traverse a list in reverse order in PythonPythonでタプルを逆にするには?

これは可能ですか?ちょうどタプルを逆にする方法を探しているので、それを逆に反復することができます。

+4

あなたは 'reversed'を使用してみましたか? – Wes

+0

この質問には多くの重複がありますが、それらはすべてタプルの文字列またはリストを要求しているようです。答えは同じです。例:http://stackoverflow.com/questions/931092/reverse-a-string-in-python http://stackoverflow.com/questions/6827413/reverse-does-not-work-on-a-python-literal http://stackoverflow.com/questions/529424/traverse-a-list-in-reverse-order-in-python – agf

+1

ありがとうございました。タプルを逆にすることについて正確に話しているものは見つかりませんでしたが、私はあなたが意味するものを見ています。 –

答えて

87

これを実行するには、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] 

に相当しますタプル。

タプルが大きい場合は、reversedですが、すべてが使いやすい場合はseq[::-1]、小さい場合はですが、Pythonのパフォーマンスはしばしば驚くほどですそれを測る!

+0

ありがとうございます、どちらが速いでしょうか?イテレータのようなサウンドは、必要に応じて繰り返しますか?もしそうなら、最初にリストを逆にすることなく、これを効果的にどのように行うのですか?反復するたびに逆転していますか? –

+2

@JoanVenge 'reversed'は、' tuple'sが最後に開始して後方に向かって動作するシーケンスであることを利用しています。 – lvc

+1

@JoanVenge私の編集を参照してください(ty lvc、ただあなたのコメントを展開しました) – tobyodavies

9

reversed組み込み関数を使用できます。

>>> x = (1, 2, 3, 4) 
>>> y = reversed(x) 
>>> tuple(y) 
(4, 3, 2, 1) 

あなただけのタプルを反復処理したい場合は、もう一度タプルに変換することなく直接reversedによって返されたイテレータを使用することができます。

あなたはリストを逆転ような方法と同様に
>>> for k in reversed(x): 
...  print k, 
... 
4 3 2 1 
6

、すなわち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 
関連する問題