반응형

정렬은 프로그래밍에서 데이터를 효과적으로 정리하는 중요한 개념입니다. Python에서는 리스트 정렬을 위한 두 가지 주요 함수가 있습니다.
- sort(): 리스트의 값을 제자리에서(in-place) 정렬하는 메서드
- sorted(): 새로운 정렬된 리스트를 반환하는 함수
이 두 함수의 차이점을 이해하고 적절하게 활용하는 것이 중요합니다.
🔹 1. sort() 메서드: 원본 리스트를 직접 정렬
sort()는 리스트의 순서를 직접 변경하는 메서드로, 반환값이 None입니다. 즉, 원본 리스트 자체가 정렬되며, 새로운 리스트를 반환하지 않습니다.
✅ 기본 사용법
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort() # 원본 리스트를 직접 정렬
print(numbers) # [1, 2, 5, 5, 6, 9]
✅ reverse=True: 내림차순 정렬
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort(reverse=True) # 내림차순 정렬
print(numbers) # [9, 6, 5, 5, 2, 1]
✅ key 매개변수: 정렬 기준 변경
words = ["banana", "apple", "cherry"]
words.sort(key=len) # 단어 길이를 기준으로 정렬
print(words) # ['apple', 'banana', 'cherry']
📌 정리
- sort()는 리스트에서만 사용 가능
- 원본 리스트를 직접 변경 (새로운 리스트를 반환하지 않음)
- 빠르고 메모리를 적게 사용하지만, 원본 데이터가 필요하면 주의해야 함
🔹 2. sorted() 함수: 정렬된 새로운 리스트 반환
sorted()는 원본 리스트를 변경하지 않고 새로운 정렬된 리스트를 반환하는 함수입니다. 따라서 리스트뿐만 아니라 튜플, 문자열, 딕셔너리 등의 모든 iterable 객체에서 사용 가능합니다.
✅ 기본 사용법
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers) # 새로운 정렬된 리스트 반환
print(sorted_numbers) # [1, 2, 5, 5, 6, 9]
print(numbers) # [5, 2, 9, 1, 5, 6] (원본 유지)
✅ 내림차순 정렬
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [9, 6, 5, 5, 2, 1]
✅ key 매개변수: 정렬 기준 변경
words = ["banana", "apple", "cherry"]
sorted_words = sorted(words, key=len) # 단어 길이를 기준으로 정렬
print(sorted_words) # ['apple', 'banana', 'cherry']
📌 정리
- sorted()는 모든 iterable 객체에서 사용 가능
- 원본 데이터를 유지하면서 새로운 정렬된 리스트를 반환
- 정렬된 데이터를 새 변수에 저장해야 사용 가능
🔹 3. sort() vs sorted() 비교 정리
sort() | sorted() | |
사용 대상 | 리스트 (list)만 가능 | 모든 iterable (list, tuple, dictionary 등) |
반환값 | None (리스트를 직접 변경) | 새로운 정렬된 리스트 반환 |
원본 데이터 변경 여부 | 원본 리스트가 변경됨 | 원본 리스트가 변경되지 않음 |
메모리 사용 | 추가 메모리 사용 없음 | 새로운 리스트 생성으로 추가 메모리 사용 |
성능 | 더 빠름 (원본 변경) | 약간 느림 (새로운 리스트 생성) |
✅ 언제 sort()를 사용할까?
- 리스트를 직접 정렬해야 할 때
- 메모리를 절약하고 싶을 때
✅ 언제 sorted()를 사용할까?
- 원본 데이터를 유지하면서 정렬된 값을 사용할 때
- 튜플, 딕셔너리, 문자열 등 다른 자료형도 정렬해야 할 때
🔹 4. 다양한 정렬 예제
✅ 리스트 안의 튜플 정렬
students = [("Alice", 90), ("Bob", 85), ("Charlie", 95)]
students.sort(key=lambda x: x[1]) # 점수 기준 정렬
print(students) # [('Bob', 85), ('Alice', 90), ('Charlie', 95)]
✅ 딕셔너리 키 정렬
dict_data = {"c": 3, "b": 2, "a": 1}
sorted_keys = sorted(dict_data.keys())
print(sorted_keys) # ['a', 'b', 'c']
✅ 딕셔너리 값 기준 정렬
dict_data = {"Alice": 90, "Bob": 85, "Charlie": 95}
sorted_items = sorted(dict_data.items(), key=lambda x: x[1])
print(sorted_items) # [('Bob', 85), ('Alice', 90), ('Charlie', 95)]
🔹 5. 성능 비교 (sort() vs sorted())
리스트 크기 | sort() 실행 시간 | sorted() 실행 시간 |
작은 리스트 (10개) | 빠름 | 약간 느림 |
큰 리스트 (10,000개) | 빠름 | 더 느림 (새로운 리스트 생성 필요) |
📌 정리
- sort()는 원본 리스트를 직접 정렬하므로 더 빠름
- sorted()는 새로운 리스트를 생성하므로 메모리 사용 증가
✅ 결론:
- 원본 리스트를 변경해도 상관없다면 sort()
- 원본 리스트를 유지하면서 정렬된 데이터를 원하면 sorted()
반응형
'IT > Python Basic' 카테고리의 다른 글
[Python] 특집 - lambda 함수 활용법 (0) | 2025.03.19 |
---|---|
[python] 파이썬 isdigit() 함수 완벽 가이드 (0) | 2025.03.19 |
[Python] 특집 - range() 함수로 리스트 다루기 (0) | 2025.03.18 |
[Python] 초급 개념21 - 파이썬 반복문의 종류 (0) | 2025.03.18 |
[Python] 튜플, 딕셔너리, 집합 개념 정리 특집 (0) | 2025.02.28 |
[python] 문자와 ASCII/Unicode 변환 - ord()와 chr() 함수 정리 (0) | 2025.02.27 |
[Python] 특집 개념 - translate 함수 (0) | 2025.02.24 |
[Python] 코딩테스트 필수 math 함수 개념 (0) | 2025.02.21 |
댓글