정렬은 가장 자주 하는 작업 중 하나이고, 파이썬은 두 가지 정렬 방법을 제공합니다.
sorted()는 「새 리스트를 반환」, list.sort()는 「원본을 정렬」합니다.
둘의 차이를 알면 헷갈림이 줄어듭니다.
sorted(iterable).
어떤 컬렉션이든 받아 정렬된 새 리스트를 반환합니다.
nums = [3, 1, 4, 1, 5]; result = sorted(nums) — result는 [1,1,3,4,5], nums는 그대로.
튜플·문자열·딕셔너리 키도 정렬할 수 있어 범용성이 좋습니다.
list.sort().
리스트의 메서드로, 원본을 정렬하고 None을 반환.
nums.sort() — nums가 [1,1,3,4,5]로 변경.
「원본을 보존하고 싶은가」가 sorted vs sort 선택의 기준입니다.
key 인자로 정렬 기준을 정합니다.
words = ["apple", "hi", "banana"].
sorted(words, key=len) — 길이 기준 ["hi", "apple", "banana"].
sorted(students, key=lambda s: s.age) — 객체의 속성 기준.
operator.itemgetter, attrgetter도 자주 쓰입니다.
reverse=True로 내림차순.
sorted(nums, reverse=True) — 큰 값부터.
또 「복합 정렬」 — 여러 기준을 차례로 — 도 자연스럽습니다.
sorted(students, key=lambda s: (s.grade, -s.score)) — 학년 오름차순, 같은 학년 안에서 점수 내림차순.
튜플로 우선순위를 정합니다.
한 줄 요약
sorted는 새 리스트 반환, list.sort()는 원본 정렬입니다.
key 인자로 정렬 기준을, reverse=True로 내림차순을, 튜플로 복합 정렬을 표현합니다.
더 알아볼 것
- sorted의 시간복잡도 — TimSort
- stable sort의 의미와 활용
- operator.itemgetter·attrgetter