안녕하세요. BlockDMask 입니다.
오늘은 파이썬 리스트 정렬의 다양한 방법을 소개하겠습니다.
sort, sorted 기본 사용법부터 key, reverse 옵션, lambda 응용, 그리고 사용자 정의 함수까지 예제와 함께 알아봅니다.
1. 기본 정렬 - sort()와 sorted()
numbers = [4, 2, 7, 1]
numbers.sort()
print(numbers) # [1, 2, 4, 7]
numbers = [4, 2, 7, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 2, 4, 7]
print(numbers) # [4, 2, 7, 1]
설명:
- sort()
는 리스트 자체를 오름차순으로 정렬(값이 바뀜)합니다.
- sorted()
는 원본은 두고, 정렬된 새로운 리스트를 반환합니다.
- 데이터 원본을 보존할지, 직접 변경할지에 따라 선택하면 됩니다.
2. 오름차순 vs 내림차순 정렬 (reverse 옵션)
nums = [3, 1, 4, 2]
nums.sort(reverse=True)
print(nums) # [4, 3, 2, 1]
설명:
- reverse=True
옵션을 쓰면 큰 수부터 작은 수로 내림차순 정렬됩니다.
- 반대로 reverse=False
는 기본(오름차순) 정렬입니다.
- 데이터가 큰 값 → 작은 값 순으로 필요할 때 활용합니다.
3. key 옵션 - 기준을 지정해 정렬하기
words = ["BlockDMask", "Python", "AI", "code"]
words.sort(key=len)
print(words) # ['AI', 'code', 'Python', 'BlockDMask']
설명:
- key=len
옵션을 쓰면, 각 요소의 길이를 기준으로 짧은 순서대로 정렬합니다.
- 다양한 기준(길이, 알파벳, 숫자 등)으로 정렬해야 할 때 key
옵션을 자주 씁니다.
- 문자열 길이, 또는 리스트 안에 튜플이나 딕셔너리가 있을 때 기준값 설정에 필수입니다.
4. lambda를 활용한 복잡한 정렬
words = ["block", "Code", "mask", "AI"]
words.sort(key=lambda x: x.lower())
print(words) # ['AI', 'block', 'Code', 'mask']
설명:
- lambda x: x.lower()
는 각 단어를 소문자로 변환한 결과를 기준으로 정렬합니다.
- 이 방식은 대소문자 구분 없이 알파벳 순서로 정렬하고 싶을 때 매우 유용합니다.
- 복잡한 기준이 필요할 때 lambda
함수와 key
를 조합해 사용합니다.
5. 딕셔너리 리스트 정렬 (key와 lambda 조합)
users = [
{"name": "BlockDMask", "age": 29},
{"name": "Alice", "age": 23},
{"name": "Bob", "age": 25}
]
users.sort(key=lambda user: user["age"])
print(users)
# [{'name': 'Alice', 'age': 23}, {'name': 'Bob', 'age': 25}, {'name': 'BlockDMask', 'age': 29}]
설명:
- lambda user: user["age"]
로 각 딕셔너리의 "age" 값을 기준으로 오름차순 정렬합니다.
- 리스트 안에 여러 사람(딕셔너리)이 있을 때, 특정 필드 기준(예: 나이, 점수)으로 순서를 정해야 할 때 자주 활용됩니다.
6. 여러 기준으로 정렬하기 (튜플, lambda)
students = [
("BlockDMask", 90),
("Alice", 95),
("Bob", 90)
]
students.sort(key=lambda x: (x[1], x[0]))
print(students)
# [('BlockDMask', 90), ('Bob', 90), ('Alice', 95)]
설명:
- lambda x: (x[1], x[0])
는 점수(두 번째 항목)로 정렬, 점수가 같으면 이름(첫 번째 항목) 순으로 정렬합니다.
- 여러 기준을 동시에 적용해야 할 때, key에 튜플을 넘겨주면 순서대로 적용됩니다.
7. 사용자 정의 함수로 정렬 기준 만들기
def custom_key(x):
return x % 10
nums = [23, 45, 12, 39]
sorted_nums = sorted(nums, key=custom_key)
print(sorted_nums) # [12, 23, 45, 39]
설명:
- custom_key(x)
는 각 숫자의 일의 자리 값(10으로 나눈 나머지)을 기준으로 정렬합니다.
- 직접 기준 함수를 만들어야 할 때, key
에 함수명을 넣어서 정렬할 수 있습니다.
8. 역순 정렬 (내림차순 key 응용)
nums = [1, 5, 2, 7]
nums.sort(key=lambda x: -x)
print(nums) # [7, 5, 2, 1]
설명:
- key=lambda x: -x
는 각 값에 음수를 곱해서 큰 값이 먼저 오게 만듭니다.
- reverse 옵션을 쓰지 않고도 내림차순 정렬 효과를 낼 수 있습니다.
9. 문자열 정렬: 알파벳, 길이, 대소문자 구분
words = ["apple", "Banana", "cherry", "banana"]
words.sort()
print(words) # ['Banana', 'apple', 'banana', 'cherry']
words.sort(key=str.lower)
print(words) # ['apple', 'Banana', 'banana', 'cherry']
words.sort(key=len)
print(words) # ['apple', 'Banana', 'cherry', 'banana']
설명:
- sort()
는 기본적으로 알파벳(유니코드) 순, 대문자가 소문자보다 앞에 옵니다.
- key=str.lower
는 대소문자 구분 없이 정렬, key=len
은 길이순 정렬입니다.
- 데이터의 성격에 따라 다양한 기준을 조합할 수 있습니다.
10. 리스트 정렬 시 주의사항
sort()
는 리스트를 바로 변경하고,sorted()
는 새 리스트 반환key
,reverse
는 동시에 사용할 수 있음- 정렬 기준 함수는 값 하나를 받아 정렬에 사용할 값을 리턴
결론
- 간단한 정렬: sort(), sorted()
- 내림차순: reverse=True, key=lambda x: -x
- 여러 기준: key=lambda x: (기준1, 기준2...)
- 딕셔너리, 사용자 정의: key, lambda 조합
- 정렬 활용법을 익히면 데이터 처리 속도가 훨씬 빨라짐
이상, 파이썬 리스트 정렬 심화에 대해 정리해보았습니다.
오늘도 읽어주셔서 감사합니다.
함께 읽으면 좋을 포스트: https://blockdmask.tistory.com/564
'<개인공부> > [Python]' 카테고리의 다른 글
[Python] 파이썬 리스트 슬라이싱 정리 ([start:end:step] 완전 이해) (0) | 2025.04.29 |
---|---|
[Python] 파이썬 index() 함수 정리 (문자 위치 찾기, 리스트 위치 찾기) (0) | 2025.04.23 |
[Python] 파이썬에서 None, null, is None 차이 정리 (0) | 2025.04.07 |
[Python] 파이썬 range()의 숨겨진 기능들 (0) | 2025.04.05 |
[Python] 파이썬 클래스 변수 vs 인스턴스 변수 차이 (0) | 2025.04.03 |
[Python] 파이썬 클래스 초보자 가이드 (__init__, self) (1) | 2025.04.01 |
[Python] 파이썬에서 날짜 다루기 (datetime 기본부터 실전까지) (0) | 2025.03.31 |
[Python] 파이썬 리스트 컴프리헨션 vs for문 (0) | 2025.03.29 |