본문 바로가기
IT/Python Basic

[Python] 초급 개념21 - sort()와 sorted()

by Echinacea 2025. 3. 14.
반응형

 

 

정렬은 프로그래밍에서 데이터를 효과적으로 정리하는 중요한 개념입니다. 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()

 

반응형

댓글