PHpullh
학습 라이브러리/Python/정렬 알고리즘

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() 는 새 리스트를 반환합니다.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.