Appia의 IT세상

파이썬[Python] 리스트(List) 역순으로 만들기, 뒤집기 (reversed / reverse / 슬라이싱 비교) 본문

Python/Python 응용

파이썬[Python] 리스트(List) 역순으로 만들기, 뒤집기 (reversed / reverse / 슬라이싱 비교)

Appia 2020. 3. 9. 07:18
반응형

파이썬[Python] 리스트(List) 역순으로 만들기,뒤집기(reversed / reverse / 슬라이싱 비교)

파이썬[Python] 리스트(List) 역순으로 만들기 (reversed / reverse / 슬라이싱 비교)

 
파이썬에서 list를 역순으로 다루는 방법은 생각보다 다양합니다. 경우에 따라서는 단순히 뒤에서부터 값을 읽어가며 순회하면 충분할 때도 있고, 반대로 리스트 자체를 거꾸로 뒤집어야 할 때도 있습니다.

이번 포스팅에서는 list를 역순으로 처리할 때 자주 쓰는 세 가지 방법인 슬라이싱([::-1]), reverse(), reversed()를 비교해보겠습니다. 각 방식이 원본 리스트를 변경하는지, 어떤 값을 반환하는지, 그리고 어떤 상황에서 선택하는 게 좋은지를 실제 예제와 함께 정리해보겠습니다.
※ 이 글은 2026년 1월 기준으로 내용이 보완 및 업데이트되었습니다.
 

슬라이싱([::-1]) 

슬라이싱[::-1]는 원본 리스트를 유지하면서 역순 리스트(복사본) 를 새로 만들 때 사용합니다. 예를 들어 원본 A는 그대로 두고, 역순으로 뒤집힌 B 리스트가 필요하다면 슬라이싱이 가장 간단합니다. 그러면 간단한 예시를 살펴보겠습니다.

my_list = [1,2,3,4,5]
reversed_list = my_list[::-1]

print(my_list)
print(reversed_list)

 
위에서 my_list에 선언된 list를 슬라이싱 방식을 통해서 역으로 리스트를 하나 더 만든 것입니다. 즉, 기존 list는 그대로 두고, 역순 복사본을 생성하는 형태입니다. 위의 실행결과는 다음과 같이 나타납니다. 

 

그림 1. 슬라이싱[::-1] 실행 예제 결과

 
 

reverse() 

앞서서 슬라이싱 방식은 별도의 리스트를 한개 생성하였다면, 리스트 자체를 역으로 변경하기 위한 방식으로 reverse()함수를 사용할 수 있습니다. 기존 선언되어 있는 리스트의 reverse()함수를 바로 실행하면 됩니다. 아래 예제를 통해 같이 살펴보겠습니다. 

my_list = [1,2,3,4,5]
my_list.reverse()

print(my_list)
 

기존 선언되어 있는 my_list라는 list에서 ".reverse()"를 붙여서 실행합니다. 그리고 해당 리스트를 출력하면 기존에 입력된 값이 반대로 되어 있는 것을 확인할 수 있습니다.

그림 2. reverse() 실행 예제 결과

 

그러면 다음과 같은 예시는 사용이 동작할까요?

my_list = [1,2,3,4,5]
for i in my_list.reverse():
    print(i)

 

위의 예시를 실행하면 문제가 발생합니다. reverse()는 반환값이 없지만(None), 리스트 자체를 제자리에서 변경합니다 . 따라서 실행하면 다음과 같은 문제가 발생합니다.

그림 3. reverse()의 결과 for문에 바로 사용할 때 문제 상황

 

 이 부분에 대해서 쉽게 생각하시기 위해선 다음 예제 코드를 살펴보겠습니다.  

my_list = [1,2,3,4,5]
print(my_list.reverse())
print(my_list)

 
위의 예제 코드를 실행하면 다음과 같은 결과가 나타납니다. 

그림 4. reverse()의 print문 실행 결과

 
그러면 위에서 문제나는 부분을 정상적으로 실행하기 위해서는 어떻게 해야할까요? 다음과 같이 코드를 구성해야 합니다. 

my_list = [1,2,3,4,5]
my_list.reverse()
for i in my_list:
    print(i)

 
위에서, 언급한 바와 같이 reverse() 반환형은 없지만, 해당 list 자체를 변경합니다.
 

reversed()

 

reversed()는 원본 list는 그대로 유지하면서 역순으로 순회할 때 가장 편한 방법입니다. 슬라이싱처럼 새 리스트를 바로 만들지 않고, 역순으로 읽어줄 수 있는 이터레이터를 반환합니다.

my_list = [1, 2, 3, 4, 5]

for i in reversed(my_list):
    print(i)

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

그림 5. reversed() 예제 결과

이 과정에서 my_list 원본은 변경되지 않습니다.
 
즉, 역순으로 루프만 돌리고, 별도의 역순 리스트가 필요하지 않다면 reversed()가 가장 편리합니다. 그러면 reversed()의 경우 슬라이싱처럼 역순 리스트를 만들 수는 없을까요? 필요하다면 list()로 감싸서 새 리스트로 변환할 수 있습니다.

 
my_list = [1, 2, 3, 4, 5]

reversed_list = list(reversed(my_list))

print(my_list)
print(reversed_list)

위의 코드를 실행하면 다음과 같이 나타나는 것을 알 수 있습니다.

그림 6. reversed()와 list를 활용한 역순 리스트 생성 예제 결과

 
참고로, reversed() 반환값은 list가 아니라 이터레이터이기 때문에 다음 코드를 실행해보면 리스트가 생성되지 않음을 알 수 있습니다.

my_list = [1, 2, 3, 4, 5]
print(reversed(my_list))

그림 7. reversed() 반환 값 확인

 

슬라이싱 [::-1] /reverse()/reversed() 비교

마지막으로 슬라이싱[::-1], reverse(), reversed()를 원본 변경 여부/반환 타입/메모리 관점에서 간단히 비교해보겠습니다.

방법 원본 변경 반환 타입 메모리 추천 상황
lst[::-1] 변경 안 함 list (새 리스트) 추가 메모리 사용(복사본 생성) 역순 리스트가 필요하고 원본은 유지해야 할 때. 한 줄로 간단히 만들고 싶을 때
lst.reverse() 변경함 None 추가 메모리 거의 없음 원본 리스트 자체를 뒤집어도 될 때(제자리 변경). 메모리 절약이 필요할 때
reversed(lst) 변경 안 함 list_reverseiterator (이터레이터) 매우 적음(지연 평가) 역순으로 순회만 하면 될 때(for 루프). 필요 시 list(reversed(lst))로 리스트 변환

 

  • 원본을 유지한 채 역순 순회는 reversed(), 역순 리스트 생성은 [::-1], 원본 자체 뒤집기는 reverse()가 가장 직관적입니다.

 
이번 포스팅에서는 슬라이싱[::-1], reverse(), reversed()을 이용하여 list 역순으로 변환하는 방법에 대해서 살펴봤습니다. 정리하면 순회만 필요하면 reversed(), 새 리스트가 필요하면 [::-1], 원본을 뒤집어도 되면 reverse()가 가장 직관적입니다. 직접 한번 해보시면 궁금한 점이나 문의 사항이 있으시면 언제든지 댓글 및 질문 주시면 답변 드릴 수 있도록 하겠습니다. 
 

 

파이썬 리스트 비교 6가지 방법: 순서/중복/교집합/차집합/인덱스 비교

파이썬 리스트 비교 6가지 방법: 순서/중복/교집합/차집합/인덱스 비교 이번 포스팅에서는 파이썬에서 자주 사용하는 리스트를 비교하는 방법을 정리해보겠습니다. 리스트 비교는 단순히 값만

appia.tistory.com

 

 

반응형
Comments