728x90
반응형
Python의 sorted() 함수는 리스트, 튜플, 딕셔너리 등 반복 가능한(iterable) 데이터를 정렬할 때 사용됩니다. 기본적으로 오름차순으로 정렬되지만, key 매개변수를 사용하면 사용자 정의 기준에 따라 데이터를 정렬할 수 있습니다.
1. sorted() 함수의 기본 사용법
문법
sorted(iterable, key=None, reverse=False)
- iterable: 정렬할 데이터 (리스트, 튜플, 딕셔너리 등).
- key: 정렬 기준을 정의하는 함수. 각 요소를 기준으로 변환한 값에 따라 정렬.
- reverse: 정렬 방향을 설정. 기본값은 False(오름차순), True로 설정하면 내림차순.
2. 기본 정렬
- 데이터의 기본값(숫자 크기, 사전 순서 등)에 따라 정렬됩니다.
# 숫자 기본 정렬
numbers = [5, 2, 9, 1]
print(sorted(numbers)) # 출력: [1, 2, 5, 9]
# 문자열 기본 정렬 (사전 순)
words = ["apple", "banana", "cherry"]
print(sorted(words)) # 출력: ['apple', 'banana', 'cherry']
3. key를 사용한 사용자 정의 정렬
key는 각 요소를 특정 값으로 변환한 뒤 정렬 기준으로 사용합니다. key는 함수나 람다 함수로 정의할 수 있습니다.
예제 1: 문자열 길이로 정렬
words = ["apple", "banana", "kiwi", "cherry"]
print(sorted(words, key=len)) # 출력: ['kiwi', 'apple', 'cherry', 'banana']
예제 2: 튜플의 특정 요소로 정렬
튜플 데이터가 있을 때, 각 튜플의 두 번째 요소를 기준으로 정렬합니다.
data = [(1, 'apple'), (2, 'banana'), (3, 'cherry')]
print(sorted(data, key=lambda x: x[1]))
# 출력: [(1, 'apple'), (2, 'banana'), (3, 'cherry')]
예제 3: 숫자 내림차순 정렬
key와 reverse를 함께 사용하여 내림차순 정렬.
numbers = [5, 2, 9, 1]
print(sorted(numbers, reverse=True)) # 출력: [9, 5, 2, 1]
4. 복합 조건 정렬
여러 조건을 조합해 정렬할 때, key에서 튜플을 반환하도록 정의합니다.
예제: 판매량과 이름으로 정렬
- 판매량은 내림차순으로.
- 판매량이 같으면 이름은 오름차순으로.
books = [("book1", 10), ("book3", 5), ("book2", 10)]
sorted_books = sorted(books, key=lambda x: (-x[1], x[0]))
print(sorted_books)
# 출력: [('book1', 10), ('book2', 10), ('book3', 5)]
5. 딕셔너리 정렬
딕셔너리는 키나 값으로 정렬할 수 있습니다.
예제 1: 키로 정렬
data = {"b": 3, "a": 1, "c": 2}
print(sorted(data)) # 출력: ['a', 'b', 'c']
예제 2: 값으로 정렬
data = {"b": 3, "a": 1, "c": 2}
print(sorted(data.items(), key=lambda x: x[1]))
# 출력: [('a', 1), ('c', 2), ('b', 3)]
6. reverse 옵션
reverse=True를 추가하면 정렬 방향을 반대로 설정합니다.
예제: 내림차순 정렬
numbers = [5, 2, 9, 1]
print(sorted(numbers, reverse=True)) # 출력: [9, 5, 2, 1]
7. key에 사용자 정의 함수 사용
예제: 절대값으로 정렬
def absolute(x):
return abs(x)
numbers = [-3, 5, -1, 4]
print(sorted(numbers, key=absolute)) # 출력: [-1, -3, 4, 5]
람다 함수를 사용한 동일 예제
numbers = [-3, 5, -1, 4]
print(sorted(numbers, key=lambda x: abs(x))) # 출력: [-1, -3, 4, 5]
8. 실전 예제
문제: 문자열 리스트를 길이 내림차순으로 정렬하되, 길이가 같으면 사전 순으로 정렬
words = ["apple", "banana", "kiwi", "cherry", "pear"]
sorted_words = sorted(words, key=lambda x: (-len(x), x))
print(sorted_words)
# 출력: ['banana', 'cherry', 'apple', 'kiwi', 'pear']
9. 정리
- sorted()는 기본적으로 오름차순으로 정렬됩니다.
- key 매개변수는 요소를 변환한 값을 기준으로 정렬할 때 사용됩니다.
- key는 일반 함수 또는 람다 함수를 사용하여 유연하게 정의할 수 있습니다.
- 여러 조건을 조합하거나 reverse=True를 활용하여 복잡한 정렬도 쉽게 구현할 수 있습니다.
'Category > Python' 카테고리의 다른 글
| Python의 next() 함수로 이터레이터 객체 순회하기 (0) | 2024.12.08 |
|---|---|
| Python 소수점 자리수 제어와 숫자 포매팅 :.nf (1) | 2024.12.03 |
| Python에서 집합(set) 생성과 초기값 설정법 (0) | 2024.11.27 |
| Python collections 모듈의 defaultdict 사용하기 (0) | 2024.11.22 |
| 딕셔너리 확장 자료구조 Counter 사용하기 (1) | 2024.11.20 |