1. 파이썬 sorted() 함수와 key=lambda를 이용한 정렬
- 파이썬에서 sorted() 함수는 반복 가능한(iterable) 객체를 정렬하여 새로운 리스트로 반환하는 함수이다.
- 정렬 기준을 사용자 정의하고 싶을 때 key 인자에 lambda 함수를 사용하면 매우 유용하다.
1.1 기본 구조
sorted(iterable, key=None, reverse=False)
- iterable
- 리스트, 튜플 등 반복 가능한 객체
- key
- 각 요소에서 정렬 기준이 되는 값을 추출하는 함수 (보통 lambda 사용)
- reverse
- True이면 내림차순, False이면 오름차순 (기본값)
1.2 lambda를 활용한 정렬
1.2.1 기본 사용 예시
numbers = [5, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
- 결과: [1, 2, 5, 7, 9]
- 기본적으로 오름차순 정렬한다.
1.2.2 key=lambda를 사용한 정렬
- lambda를 사용하면 특정 기준에 따라 정렬할 수 있다.
- 결과: ['date', 'apple', 'banana', 'cherry']
- 설명: 문자열 길이(len(x))를 기준으로 오름차순 정렬하였다.
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)
1.3 다양한 예시
1.3.1 숫자를 절댓값 기준으로 정렬하기
numbers = [-5, 3, -1, -7, 2]
sorted_numbers = sorted(numbers, key=lambda x: abs(x))
print(sorted_numbers)
- 결과: [-1, 2, 3, -5, -7]
- 설명: 절댓값이 작은 순서대로 정렬하였다.
1.3.2 길이 + 사전순 정렬
- 우선 문자열 길이로 정렬하고, 길이가 같으면 사전순으로 정렬하고 싶을 경우 다음처럼 한다.
- 결과: ['bat', 'car', 'cat', 'dog', 'apple', 'banana']
- 설명:
- 길이가 3인 단어끼리는 사전순으로(bat, car, cat, dog) 정렬되었다.
- 그 다음 길이 5, 6인 단어(apple, banana)가 정렬되었다.
- 핵심 포인트:
- lambda x: (len(x), x) 처럼 튜플을 반환하면, 첫 번째 기준(len(x))을 비교하고,
- 같으면 두 번째 기준(x)으로 비교한다.
words = ["cat", "dog", "apple", "bat", "car", "banana"]
sorted_words = sorted(words, key=lambda x: (len(x), x))
print(sorted_words)
1.3.3 여러 조건을 반대로 정렬하기
words = ["cat", "dog", "apple", "bat", "car", "banana"]
sorted_words = sorted(words, key=lambda x: (len(x), x), reverse=True)
print(sorted_words)
- 결과: ['banana', 'apple', 'dog', 'cat', 'car', 'bat']
- 설명:
- 길이가 긴 단어부터, 길이가 같으면 사전 역순으로 정렬되었다.
- 주의할 점:
- reverse=True는 전체 정렬 결과를 뒤집는다.
- 만약 길이는 내림차순, 사전순은 오름차순처럼 다르게 설정하고 싶으면 lambda 안에서 조정해야 한다.
- 예를 들어:
- 결과: 길이 긴 순서 -> 사전순 정렬이 된다.
sorted_words = sorted(words, key=lambda x: (-len(x), x))
'Language > Python' 카테고리의 다른 글
index() 함수 (0) | 2025.04.20 |
---|---|
튜플(Tuple) 자료형 (0) | 2024.12.31 |
리스트 자료형 (0) | 2024.12.30 |
문자열 자료형 (0) | 2024.12.29 |
숫자형 (Numeric Types) (1) | 2024.12.26 |