반응형
파이썬 리스트 정렬 완전 정복 – sort(), sorted(), key 옵션까지
파이썬에서 리스트를 정렬하는 방법에는 크게 두 가지가 있습니다.
하나는 리스트 자체를 정렬하는 .sort() 메서드이고,
다른 하나는 정렬된 새로운 리스트를 반환하는 sorted() 함수입니다.
이 글에서는 두 방법의 차이를 명확하게 설명하고,
정렬 기준을 지정할 수 있는 key 옵션까지 포함해 실용적인 예제를 함께 소개합니다.
1. 리스트 자체를 정렬하는 sort()
L = [1, 6, 3, 8, 6, 2, 9]
L.sort()
print(L) # [1, 2, 3, 6, 6, 8, 9]
- .sort()는 리스트 객체에 직접 호출합니다.
- 정렬은 **제자리(in-place)**에서 이루어져 리스트 L 자체가 바뀝니다.
- 반환값은 None 이므로 결과를 다른 변수에 저장하려 하면 안 됩니다.
newList = L.sort()
print(newList) # None
이런 방식은 메모리를 아끼고자 할 때 적절합니다. 그러나 원본 리스트가 손상되므로 주의해야 합니다.
2. 정렬된 복사본을 만드는 sorted()
L = [1, 6, 3, 8, 6, 2, 9]
newList = sorted(L)
print(newList) # [1, 2, 3, 6, 6, 8, 9]
print(L) # [1, 6, 3, 8, 6, 2, 9]
- sorted()는 원본을 유지한 채 새로운 리스트를 반환합니다.
- 리스트뿐 아니라 문자열, 튜플, 딕셔너리 등 모든 iterable 객체에 사용할 수 있습니다.
- 복사본을 만들며 정렬 결과만 따로 보존하고 싶을 때 유용합니다.
3. 내림차순 정렬: reverse=True
기본 정렬은 오름차순입니다. 내림차순으로 정렬하고 싶다면 reverse=True를 추가하면 됩니다.
nums = [4, 1, 9, 7]
nums.sort(reverse=True)
print(nums) # [9, 7, 4, 1]
words = ['banana', 'apple', 'cherry']
sorted_words = sorted(words, reverse=True)
print(sorted_words) # ['cherry', 'banana', 'apple']
4. 정렬 기준을 바꾸는 key 옵션
key 옵션은 각 요소에 대해 정렬 기준값을 반환할 함수를 지정합니다.
다음 예제를 보시죠.
▷ 문자열 길이로 정렬
words = ['banana', 'kiwi', 'apple', 'cherry']
words.sort(key=len)
print(words) # ['kiwi', 'apple', 'banana', 'cherry']
- len 함수를 기준으로 정렬하므로, 문자열의 길이 순으로 정렬됩니다.
▷ 대소문자 구분 없이 정렬
words = ['Banana', 'apple', 'Cherry', 'date']
sorted_words = sorted(words, key=str.lower)
print(sorted_words) # ['apple', 'Banana', 'Cherry', 'date']
- str.lower는 모든 문자열을 소문자로 변환하여 비교하게 만듭니다.
- 대소문자 섞인 데이터를 정렬할 때 매우 유용합니다.
▷ 튜플 리스트 정렬 – 두 번째 값 기준
scores = [('Tom', 85), ('Jane', 92), ('Dave', 76)]
scores.sort(key=lambda x: x[1])
print(scores) # [('Dave', 76), ('Tom', 85), ('Jane', 92)]
- lambda x: x[1]은 각 튜플의 두 번째 요소(점수)를 기준으로 정렬합니다.
- key는 반드시 "정렬 기준이 될 값"을 반환하는 함수여야 합니다.
정리
비교 항목 | sort() | sorted() |
작동 방식 | 리스트 자체를 정렬 | 새로운 정렬 리스트 반환 |
반환값 | None | 정렬된 리스트 |
메모리 사용 | 효율적 (제자리 정렬) | 원본 유지, 메모리 더 사용 |
사용 가능 대상 | 리스트만 | 모든 반복 가능한 객체 |
옵션 | key, reverse | key, reverse |
마무리
정렬은 데이터를 깔끔하게 정리하고 비교할 때 반드시 필요한 기술입니다.
sort()는 빠르고 간단하지만, 원본 리스트가 바뀌니 조심해서 써야 합니다.
sorted()는 결과를 따로 보관할 수 있어 함수형 프로그래밍이나 디버깅 시 유리합니다.
그리고 key 옵션을 적절히 활용하면 단순한 정렬에서 벗어나,
문자열 처리, 점수 비교, 길이 정렬 등 다양한 상황을 유연하게 다룰 수 있습니다.
필요할 때마다 두 방법을 적절히 선택해 활용해 보세요!
'십대를 위한 코딩 > 십대를 위한 파이썬' 카테고리의 다른 글
파이썬 리스트 내포 오류 쉽게 이해하기 (1) | 2025.05.12 |
---|---|
사용자 정의 함수를 활용한 고급 key 정렬 (1) | 2025.05.11 |
리스트 내포와 조건문을 활용한 곱셈 필터링 실습 (0) | 2025.05.05 |
Python 표준 라이브러리의 모듈, os와 sys의 차이 (1) | 2025.05.03 |
str.format() 방식과 f-string 방식의 비교 설명 (0) | 2025.05.02 |