PYTHON · 컬렉션
정렬 알고리즘
Python의 sorted()와 list.sort()의 고급 사용법과 커스텀 정렬 기법입니다.
컬렉션중급sort정렬sortedTimsortkey
핵심 설명
Python의 sorted()와 list.sort()의 고급 사용법과 커스텀 정렬 기법입니다.
Python code
from operator import attrgetter, itemgetter
# 다중 키 정렬
students = [
{"name": "Alice", "grade": 3, "score": 85},
{"name": "Bob", "grade": 2, "score": 92},
{"name": "Carol", "grade": 3, "score": 92},
{"name": "Dave", "grade": 2, "score": 85},
]
# 학년 오름차순 → 점수 내림차순
result = sorted(students, key=lambda s: (s["grade"], -s["score"]))
for s in result:
print(f" {s['grade']}학년 {s['name']}: {s['score']}점")
# operator 모듈 (더 빠름)
by_score = sorted(students, key=itemgetter("score"), reverse=True)
# 안정 정렬 활용 (Timsort)
# 여러 키로 정렬 시 덜 중요한 키부터 정렬
data = [(1, "b"), (2, "a"), (1, "a"), (2, "b")]
data.sort(key=lambda x: x[1]) # 먼저 문자 정렬
data.sort(key=lambda x: x[0]) # 그 다음 숫자 정렬
print(data) # [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
# functools.cmp_to_key (복잡한 비교)
from functools import cmp_to_key
words = ["banana", "Apple", "cherry"]
result = sorted(words, key=cmp_to_key(
lambda a, b: (a.lower() > b.lower()) - (a.lower() < b.lower())
))
print(result) # ['Apple', 'banana', 'cherry']학습 팁
Python의 Timsort는 안정 정렬이므로 같은 키의 원소 순서가 보존됩니다. 이를 활용해 다단계 정렬이 가능합니다.
주의할 점
list.sort()는 원본을 변경하고 None을 반환합니다. sorted()는 새 리스트를 반환합니다.
자주 묻는 질문
정렬 알고리즘란 무엇인가요?
Python의 sorted() 와 list.sort() 의 고급 사용법과 커스텀 정렬 기법입니다.
정렬 알고리즘 학습 시 주의할 점은 무엇인가요?
list.sort() 는 원본을 변경하고 None 을 반환합니다. sorted() 는 새 리스트를 반환합니다.