Python에서 정렬을 다루는 방법을 다룹니다.
리스트를 정렬할 때 자주 사용하는 sort()와 sorted(), 정렬 기준을 바꾸는 key, 간단한 함수를 만드는 lambda, 그리고 역순 정렬까지 함께 살펴보겠습니다.
1. sort()와 sorted()
sort()와 sorted()는 모두 데이터를 정렬할 때 사용합니다.
sort()
리스트 자체를 직접 정렬
nums = [5, 2, 9, 1, 3]
nums.sort()
print(nums) # [1, 2, 3, 5, 9]
- list형의 method 중 하나이므로 list.sort()의 형태로 작성한다.
sorted()
정렬된 새로운 리스트를 반환
nums = [5, 2, 9, 1, 3]
result = sorted(nums)
print(result) # [1, 2, 3, 5, 9]
print(nums) # [5, 2, 9, 1, 3]
- 내장 함수이므로, sorted(list)의 형태로 작성한다.
sort()는 원본을 바꾸기 때문에 이후에도 같은 리스트를 계속 사용할 계획이라면 주의해야 합니다.
2. key 활용
정렬할 때 값 자체가 아니라 특정 기준으로 정렬하고 싶을 때가 있습니다.
이럴 때 key 인자를 사용하면 됩니다.
key에는 정렬 기준이 되는 함수를 넣습니다.
words = ["banana", "apple", "kiwi", "pear"]
result = sorted(words, key = len)
print(result) # ['kiwi', 'pear', 'apple', 'banana']
students = [
("Alice", 90),
("Bob", 75),
("Charlie", 85)
]
result = sorted(students, key = lambda x: x[1])
print(result) # [('Bob', 75), ('Charlie', 85), ('Alice', 90)]
key를 사용하면 문자열 길이, 숫자, 튜플의 특정 위치처럼 다양한 기준으로 정렬할 수 있습니다.
3. lambda 함수
lambda는 짧은 함수를 한 줄로 작성할 때 사용합니다.
정렬 기준이 간단할 때 lambda를 함께 쓰면 코드가 짧고 보기 쉬워집니다.
별도의 이름 없는 익명 함수를 즉석에서 정의하여 코드를 획기적으로 간결하게 만들고, 가독성을 높이며, 불필요한 함수 정의 과정을 줄여줍니다.
nums = [1, -4, 3, -2, 5]
result = sorted(nums, key = lambda x: abs(x))
print(result) # [1, -2, 3, -4, 5]
points = [(3, 4), (1, 2), (5, 1)]
result = sorted(points, key = lambda x: x[0] + x[1])
print(result) # [(1, 2), (3, 4), (5, 1)]
4. 역순 정렬
내림차순으로 정렬하고 싶을 때는 reverse = True를 사용합니다.
숫자뿐 아니라 문자열, 튜플 정렬에도 동일하게 적용할 수 있습니다.
nums = [5, 2, 9, 1, 3]
result = sorted(nums, reverse = True)
print(result) # [9, 5, 3, 2, 1]
words = ["banana", "apple", "kiwi", "pear"]
result = sorted(words, key = len, reverse = True)
print(result) # ['banana', 'apple', 'pear', 'kiwi']
reverse = True는 key와 함께 자주 사용됩니다. 정렬 기준은 유지한 채 순서만 반대로 바꿀 수 있습니다.
5. 종합 예제
아래 예시는 학생 정보를 이름, 점수 기준으로 정리하는 간단한 예제입니다.
students = [
{"name": "Alice", "score": 90},
{"name": "Bob", "score": 75},
{"name": "Charlie", "score": 85},
{"name": "Dave", "score": 90}
]
# 점수 오름차순 정렬
by_score = sorted(students, key = lambda x: x["score"])
print(by_score)
# 점수가 같으면 이름 순으로 정렬
by_score_name = sorted(students, key = lambda x: (x["score"], x["name"]))
print(by_score_name)
# 점수 내림차순 정렬
desc_score = sorted(students, key = lambda x: x["score"], reverse = True)
print(desc_score)
- 정렬 문제에서는 어떤 기준으로 정렬할지 먼저 정하고, 그 기준을 key와 lambda로 표현하는 습관을 들이면 좋습니다.
6. 자주 하는 실수/주의점
• sort()는 원본 리스트를 직접 바꾸고, sorted()는 새 리스트를 만듭니다.
• key에는 정렬 기준을 반환하는 함수를 넣어야 합니다.
• reverse = True는 내림차순 정렬을 의미합니다.
• 문자열 숫자를 정렬할 때는 실제 숫자 기준인지 문자 기준인지 확인해야 합니다.
7. 종합 요약
• sort(): 리스트 자체를 정렬
• sorted(): 정렬된 새 리스트 반환
• key: 정렬 기준 지정
• lambda: 간단한 정렬 기준을 짧게 작성
• reverse = True: 역순 정렬
'GDGoC > Python' 카테고리의 다른 글
| [Python] Basic #04: 딕셔너리 (Dictionary) (0) | 2026.05.11 |
|---|---|
| [Python] Algorithm #03: 이분 탐색 (Binary Search) (0) | 2026.05.06 |
| [Python] Algorithm #02: 문자열 (0) | 2026.04.25 |
| [Python] Basic #02: 리스트와 문자열 활용 (0) | 2026.04.25 |
| [Python] Algorithm #01: 자료구조 (0) | 2026.04.25 |