본문 바로가기

python

python - sort와 sorted의 차이와 정렬 방법, 사용 예시

Python 정렬 메서드 비교: sort와 sorted

Python에서는 리스트를 정렬할 때 두 가지 방법을 제공한다.
list.sort() 메서드와 sorted() 함수.
둘 다 리스트를 정렬하는 데 사용되지만, 동작 방식과 반환값에서 차이가 있습니다.

 

1. list.sort(): 리스트 객체의 메서드

  • 정렬 대상: 리스트 객체만 사용 가능.
  • 작동 방식: 원본 리스트를 직접 정렬(in-place).
  • 반환값: None (정렬된 리스트를 반환하지 않음).
  • 장점: 메모리 효율적(원본 리스트를 수정).
  • 사용 예시:
fruits = ["banana", "apple", "cherry"]
fruits.sort()  # 원본 리스트 정렬
print(fruits)  # 출력: ['apple', 'banana', 'cherry']

"""
만약 
sorted_fruits = fruits.sort() 와 같이 코드를 작성한다면
None을 반환한다.
"""

 

 

2. sorted(): 내장 함수

  • 정렬 대상: 리스트뿐 아니라 모든 반복 가능한(iterable) 객체 사용 가능.
  • 작동 방식: 정렬된 새로운 리스트를 반환(원본 데이터 변경 없음).
  • 반환값: 정렬된 새로운 리스트.
  • 장점: 원본 데이터는 그대로 유지되고, 새롭게 정렬된 데이터를 활용 가능.
  • 사용 예시:
fruits = ["banana", "apple", "cherry"]
sorted_fruits = sorted(fruits)  # 새로운 리스트 반환
print(sorted_fruits)  # 출력: ['apple', 'banana', 'cherry']
print(fruits)  # 원본은 그대로: ['banana', 'apple', 'cherry']

 

sort와 sorted의 차이점 요약

특징 list.sort() sorted()
적용 대상 리스트만 모든 반복 가능한 객체
원본 변경 여부 원본 리스트 변경 (in-place) 원본 데이터 유지
반환값 None 정렬된 새로운 리스트
메모리 효율성 더 효율적 추가 메모리 사용
사용 편의성 리스트를 직접 정렬할 때 적합 정렬된 결과를 따로 저장할 때 적합

 

3. 정렬 기준 추가: key, reverse, lambda

두 방법 모두 정렬 기준을 설정하는 **key**와 정렬 방향을 설정하는 reverse 옵션을 지원합니다.

key 옵션

  • 정렬 기준을 설정하는 함수.
  • 예: 문자열 길이로 정렬하기.
fruits = ["banana", "apple", "cherry"]
fruits.sort(key=len)  # sort 사용
print(fruits)  # 출력: ['apple', 'cherry', 'banana']

fruits = ["banana", "apple", "cherry"]
sorted_fruits = sorted(fruits, key=len)  # sorted 사용
print(sorted_fruits)  # 출력: ['apple', 'cherry', 'banana']

 

reverse 옵션

  • 정렬 방향을 설정 (True로 설정하면 내림차순).
numbers = [3, 1, 4, 1, 5]
numbers.sort(reverse=True)  # sort 사용
print(numbers)  # 출력: [5, 4, 3, 1, 1]

numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, reverse=True)  # sorted 사용
print(sorted_numbers)  # 출력: [5, 4, 3, 1, 1]

 

lambda 옵션

numbers = [(-1, 3), (4, 2), (1, 7), (3, 1)]

# 첫 번째 요소로 정렬
sorted_by_first = sorted(numbers, key=lambda x: x[0])
print("첫 번째 요소 기준:", sorted_by_first)
# [(-1, 3), (1, 7), (3, 1), (4, 2)]

# 두 번째 요소로 정렬
sorted_by_second = sorted(numbers, key=lambda x: x[1])
print("두 번째 요소 기준:", sorted_by_second)
# [(3, 1), (4, 2), (-1, 3), (1, 7)]

4. 언제 sort와 sorted를 사용할까?

  • sort:
    • 리스트 원본을 정렬해도 괜찮을 때.
    • 메모리를 절약해야 할 때.
    • 정렬된 데이터를 따로 저장할 필요가 없을 때.
  • sorted:
    • 원본 데이터를 유지해야 할 때.
    • 리스트가 아닌 반복 가능한 객체(예: 튜플, 문자열 등)를 정렬할 때.
    • 정렬된 결과를 새로운 변수에 저장하거나 여러 번 사용할 때.