문제 상황
파이썬에서 숫자로 이루어진 리스트가 있을 때, 이를 뒤집거나 정렬해야 하는 경우가 자주 발생합니다. 다만 여기서 중요한 조건은 원본 리스트는 절대 변경하지 않아야 한다는 점입니다.
리스트 객체에는 기본적으로 reverse() 메서드와 sort() 메서드가 제공되지만, 이들은 리스트를 제자리(in-place)에서 수정하기 때문에 호출하는 순간 원본 데이터가 바뀌어 버립니다. 따라서 원본 순서를 그대로 유지하려면 내장 함수인 reversed()와 sorted()를 사용해야 합니다.
해결 접근 방법
두 내장 함수의 동작 방식은 다음과 같습니다.
reversed(l): 리스트의 요소를 역순으로 순회하는 반복자(iterator)를 반환합니다. 원본은 그대로 유지되며, 이를list()로 감싸면 새로운 역순 리스트를 얻을 수 있습니다.sorted(l): 리스트를 오름차순으로 정렬한 새로운 리스트를 반환합니다. 마찬가지로 원본에는 어떠한 영향도 주지 않습니다.
이를 단계별로 정리하면 다음과 같습니다.
reversed()함수가 반환하는 반복자를list()로 변환하여rev에 저장합니다.rev를 출력합니다.sorted()함수를 사용해 리스트l을 정렬한 결과를srt에 저장합니다.srt를 출력합니다.
예제 코드
다음 구현 예제를 통해 더 쉽게 이해할 수 있습니다.
def solve(l): rev = list(reversed(l)) print(rev) srt = sorted(l) print(srt) l = [2,5,8,6,3,4,7,9] solve(l)
입력
[2,5,8,6,3,4,7,9]
출력
[9, 7, 4, 3, 6, 8, 5, 2] [2, 3, 4, 5, 6, 7, 8, 9]
핵심 정리
위 코드를 실행하면 첫 번째 줄에는 역순으로 배치된 리스트가, 두 번째 줄에는 오름차순으로 정렬된 리스트가 출력됩니다. 실행 후에도 원본 리스트 l = [2,5,8,6,3,4,7,9]는 처음과 동일하게 유지됩니다.
정리하자면, 원본을 변경해도 괜찮다면 reverse()와 sort() 메서드를, 원본을 반드시 보존해야 한다면 reversed()와 sorted() 함수를 사용하는 것이 파이썬 프로그래밍의 올바른 습관입니다.