본문 바로가기
Category/Python

파이썬 정렬 함수 sort()와 sorted() 차이점

by Corinee 2024. 11. 18.
728x90
반응형

sort와 sorted는 Python에서 리스트와 같은 데이터 구조를 정렬할 때 사용되지만, 작동 방식과 사용 용도가 다릅니다.

1. sort

  • 리스트 객체의 메서드로, 원본 리스트를 제자리에서(in-place) 정렬합니다.
  • 정렬된 결과를 반환하지 않고, 원본 리스트 자체를 변경합니다.

사용법

list.sort(key=None, reverse=False)

매개변수

  • key: 정렬 기준으로 사용할 함수를 지정. (기본값: None)
  • reverse: 정렬 순서를 반대로 설정. True이면 내림차순, 기본값은 False로 오름차순.

예제

# 원본 리스트 정렬
numbers = [3, 1, 4, 1, 5, 9]
numbers.sort()
print(numbers)  # [1, 1, 3, 4, 5, 9]

# 내림차순 정렬
numbers.sort(reverse=True)
print(numbers)  # [9, 5, 4, 3, 1, 1]

특징

  • 원본 데이터가 변경됩니다.
  • 반환값은 None입니다. 정렬 결과는 원본 리스트에서 확인해야 합니다.

2. sorted

  • 내장 함수로, 원본 데이터를 변경하지 않고 새로운 정렬된 리스트를 반환합니다.
  • 모든 이터러블(iterable) 객체에서 사용할 수 있습니다 (리스트, 튜플, 딕셔너리, 문자열 등).

사용법

sorted(iterable, key=None, reverse=False)

매개변수

  • iterable: 정렬 대상인 반복 가능한 객체.
  • key: 정렬 기준으로 사용할 함수를 지정. (기본값: None)
  • reverse: 정렬 순서를 반대로 설정. True이면 내림차순, 기본값은 False로 오름차순.

예제

# 리스트 정렬 (새로운 리스트 반환)
numbers = [3, 1, 4, 1, 5, 9]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 1, 3, 4, 5, 9]
print(numbers)  # 원본 리스트는 변경되지 않음: [3, 1, 4, 1, 5, 9]

# 문자열 정렬
string = "python"
sorted_string = sorted(string)
print(sorted_string)  # ['h', 'n', 'o', 'p', 't', 'y']

# 튜플 정렬
tuple_data = (3, 1, 4, 1, 5, 9)
sorted_tuple = sorted(tuple_data)
print(sorted_tuple)  # [1, 1, 3, 4, 5, 9]

특징

  • 원본 데이터는 변경되지 않습니다.
  • 반환값은 정렬된 새로운 객체입니다.

3. 주요 차이점

특징                                 sort                              sorted

적용 대상 리스트 메서드 (리스트에서만 사용 가능) 모든 이터러블(iterable) 객체
반환값 None (원본 리스트를 정렬) 정렬된 새로운 리스트
원본 데이터 변경 여부 변경됨 (in-place 정렬) 변경되지 않음 (원본 데이터는 유지됨)
사용 방식 list.sort() sorted(iterable)

4. 언제 사용해야 할까?

  • sort:
    • 리스트를 제자리에서 정렬해야 할 때 사용.
    • 메모리 사용을 최소화하고, 원본 데이터를 정렬해야 할 때 적합.
  • sorted:
    • 원본 데이터를 유지해야 하거나, 이터러블 객체를 정렬해야 할 때 사용.
    • 정렬된 결과를 새로운 객체로 사용하려면 적합.

5. 예제 비교

sort

numbers = [3, 1, 4, 1, 5, 9]
numbers.sort()  # 원본 리스트 자체가 정렬됨
print(numbers)  # [1, 1, 3, 4, 5, 9]

sorted

numbers = [3, 1, 4, 1, 5, 9]
new_numbers = sorted(numbers)  # 새로운 리스트 반환
print(new_numbers)  # [1, 1, 3, 4, 5, 9]
print(numbers)  # 원본 리스트는 변경되지 않음: [3, 1, 4, 1, 5, 9]

6. 정렬 기준 (key 사용)

두 함수 모두 key 매개변수를 사용해 정렬 기준을 커스터마이징할 수 있습니다.

예제

# 절대값 기준으로 정렬
numbers = [-3, 1, -4, 1, -5, 9]
print(sorted(numbers, key=abs))  # [1, 1, -3, -4, -5, 9]

# 문자열 길이 기준으로 정렬
words = ["apple", "banana", "kiwi"]
print(sorted(words, key=len))  # ['kiwi', 'apple', 'banana']

7. 정리

  • sort는 리스트에서만 사용 가능하며, 원본 데이터를 직접 변경합니다.
  • sorted는 모든 이터러블 객체에서 사용할 수 있으며, 원본 데이터를 유지하고 새로운 객체를 반환합니다.
  • key와 reverse 매개변수를 사용하여 정렬 기준과 순서를 커스터마이징할 수 있습니다.