2012-04-18 5 views
36

가능한 중복 :
Traverse a list in reverse order in Python파이썬에서 튜플을 뒤집는 방법은 무엇입니까?

이 가능합니까? 그 자리에있을 필요는 없습니다. 단지 튜플을 뒤집을 수있는 방법을 찾고 있습니다. 그래서 그것을 뒤에서 반복 할 수 있습니다.

+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

이 작업을 수행하는 두 관용적 가지 방법이 있습니다 : 튜플는 불변이기 때문에

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 튜플은 크지 만 파이썬의 성능은 너무 자주 놀라운 때 그것을 측정해라!

+0

감사합니다. 어느 것이 더 빠릅니까? iterate iterates on iterate와 같은 사운드가 필요합니까? 그렇다면 목록을 먼저 뒤집지 않고 어떻게 효과적으로 처리 할 수 ​​있습니까? iterates 때마다 그것을 뒤집을 수 있습니까? –

+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 
관련 문제