안녕하세요 아임코딩입니다. 파이썬으로 리스트를 정렬할 때 sort()와 sorted() 둘 다 사용할 수 있어서 헷갈리는 분들이 많습니다. 이번 글에서 둘의 차이를 명확하게 정리해드리겠습니다.
1. 결론 먼저: 가장 중요한 차이
| 사용 대상 | 리스트의 메서드 | 모든 반복 가능한 객체에 쓸 수 있는 함수 |
| 원본 리스트 | 직접 변경됨 | 원본은 그대로, 새 리스트 반환 |
| 반환값 | None | 정렬된 새 리스트 |
이 표 하나만 기억하셔도 실전에서 헷갈릴 일이 없습니다. 아래에서 코드로 직접 확인해보겠습니다.
2. sort() 사용법
numbers = [5, 2, 8, 1, 9]
numbers.sort()
print(numbers) # [1, 2, 5, 8, 9]
sort()는 리스트 자체를 정렬해버립니다. 원본 리스트가 바뀝니다.
numbers = [5, 2, 8, 1, 9]
result = numbers.sort()
print(result) # None ⚠️
print(numbers) # [1, 2, 5, 8, 9]
여기서 많이 하는 실수가 있습니다. result = numbers.sort()처럼 반환값을 변수에 저장하려는 경우인데요, sort()는 아무것도 반환하지 않습니다(None). 정렬은 이미 numbers 안에서 끝났기 때문이에요. 이 부분을 모르고 쓰면 None이 나와서 당황하는 경우가 많으니 꼭 기억해두세요.
3. sorted() 사용법
numbers = [5, 2, 8, 1, 9]
new_numbers = sorted(numbers)
print(numbers) # [5, 2, 8, 1, 9] ← 원본 그대로!
print(new_numbers) # [1, 2, 5, 8, 9] ← 정렬된 새 리스트
sorted()는 원본 리스트는 건드리지 않고, 정렬된 새로운 리스트를 만들어서 반환합니다. 원본 데이터를 유지해야 할 때는 반드시 sorted()를 사용해야 합니다.
또한 sorted()는 리스트뿐 아니라 튜플, 문자열, 딕셔너리 등 반복 가능한(iterable) 모든 자료형에 사용할 수 있습니다.
word = "python"
print(sorted(word)) # ['h', 'n', 'o', 'p', 't', 'y']
4. 내림차순 정렬하기
두 함수 모두 reverse=True 옵션을 사용하면 내림차순으로 정렬할 수 있습니다.
numbers = [5, 2, 8, 1, 9]
numbers.sort(reverse=True)
print(numbers) # [9, 8, 5, 2, 1]
numbers = [5, 2, 8, 1, 9]
new_numbers = sorted(numbers, reverse=True)
print(new_numbers) # [9, 8, 5, 2, 1]
5. key 옵션으로 정렬 기준 정하기
문자열 길이 순으로 정렬하고 싶다거나, 특정 기준으로 정렬하고 싶을 때는 key 옵션을 사용합니다.
words = ["banana", "kiwi", "apple", "fig"]
# 문자열 길이 순으로 정렬
result = sorted(words, key=len)
print(result) # ['kiwi', 'fig', 'apple', 'banana']
key=len을 넣으면 각 요소의 길이를 기준으로 정렬합니다. len 대신 원하는 함수를 넣으면 그 기준으로 정렬할 수 있어요.
6. 언제 뭘 써야 할까?
- 원본 리스트가 더 이상 필요 없고, 그 자체를 정렬해서 쓰고 싶다 → sort()
- 원본은 유지하면서 정렬된 결과만 따로 필요하다 → sorted()
- 리스트가 아닌 다른 자료형(튜플, 문자열 등)을 정렬하고 싶다 → sorted() (sort()는 리스트에만 있는 메서드라 다른 자료형엔 못 씁니다)
7. 정리
numbers = [5, 2, 8, 1, 9]
# sort() : 원본 변경, 반환값 없음(None)
numbers.sort()
# sorted() : 원본 유지, 새 리스트 반환
sorted(numbers)
이름이 비슷해서 헷갈리기 쉽지만, "원본을 바꾸느냐 안 바꾸느냐"만 기억하면 실전에서 헷갈릴 일이 없습니다. 궁금한 점은 댓글로 남겨주세요!
'프로그래밍 > Python' 카테고리의 다른 글
| [파이썬] 백준 2751번 수 정렬하기 2 문제 풀이 python (1) | 2024.02.06 |
|---|---|
| [파이썬] 백준 2609번 최대공약수와 최소공배수 문제 풀이 python (0) | 2024.02.06 |
| [파이썬] 백준 2292번 벌집 문제 풀이 python (0) | 2024.02.06 |
| [파이썬] 백준 2231번 분해합 문제 풀이 python (0) | 2024.02.06 |
| [파이썬] 백준 2164번 카드2 문제 풀이 python (1) | 2024.02.06 |