리스트를 거꾸로 뒤집는 데에는 여러가지 방법이 있는데 그 중에서도 reversed()에 대해 정리해보고자 한다.
reversed()를 씌워서 그대로 print 해보면 아래와 같이 주소가 출력된다. 그 이유는 reversed()가 기본적으로 iterator 객체를 반환하기 때문이다. 똑같이 -ed로 끝나는 sorted()가 정렬된 새 리스트를 만들어서 반환해주기 때문에 헷갈리지 않도록 주의해야 한다. 단, 원본은 보존된다는 점은 동일하다.
arr = [1, 2, 3]
print(reversed(arr)) # <list_reverseiterator object at 0x7bb077cce620>
뒤집은 값을 잘 꺼내서 사용하려면 list나 tuple로 형변환을 해주면 되는데 reversed()는 리스트 외에도 튜플과 문자열을 뒤집는 데 사용이 가능하다. str로 형변환을 하면 형변환 이전과 같은 값이 출력되므로 문자열을 뒤집는 경우에는 ''.join() 등을 이용해서 문자열로 변환해주어야 한다.
문자열을 뒤집을 때 reversed()를 사용하면 합쳐주는 작업도 해야 하기 때문에 실행 속도나 메모리 측면에서 약간의 손해를 보더라도 [::-1]을 사용하는 것이 편할 것 같기는 하다.
arr = [1, 2, 3]
print(list(reversed(arr))) # [3, 2, 1]
print(tuple(reversed(arr))) # (3, 2, 1)
print(str(reversed(arr))) # <list_reverseiterator object at 0x7bb077cce620>
번외로 Python 공식 문서 - Interator Types에 나와있듯이 iterator 객체는 next()의 사용이 가능하기 때문에 반환된 iterator 객체에 next()를 적용하여 값에 접근할 수도 있다.
arr = [1, 2, 3]
print(next(reversed(arr))) # 3