본문 바로가기

Python

Python의 정렬 함수: sort와 sorted

Python의 정렬 함수: sort와 sorted

 

알고리즘 문제풀 때 종종 필요한 한개 값 기준 정렬과 다중 기준 정렬

기준이 여러개일 때 하나를 기준으로 오름차순,, 다른 하나를 기준으로 내림차순 등 구현할 때 

sorted 인자값으로 Lambda식을 전달하여야하는데 자꾸 까먹어서 포스팅으로 정리해봅니다... ㅎㅎ

 

우선, Python에서는 리스트(List)의 정렬을 위해 sort와 sorted를 사용할 수 있습니다.


둘 다 리스트를 정렬할 수 있다는 점에서는 같지만,
정렬 기준 및 반환값 등에서 차이점이 있습니다.
 
 

sort 메서드

sort 메서드는 리스트 객체의 메서드로 사용됩니다.

이 함수는 원본 리스트를 직접 변경하며, 정렬된 결과를 반환하지 않습니다. 따라서 원본 리스트가 정렬된 상태로 변경됩니다.
리스트

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

오름차순 : list.sort()

# 오름차순으로 정렬 (원본 리스트 변경)
numbers.sort()
print(numbers)  # 출력: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

내림차순 : list.sort(reverse=True)

# 내림차순으로 정렬 (원본 리스트 변경)
numbers.sort(reverse=True)
print(numbers)  # 출력: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

sorted 함수

sorted 함수는 Python 내장 함수로 제공됩니다. 이 함수는 원본 리스트를 변경하지 않고, 정렬된 결과를 새로운 리스트로 반환합니다.

리스트

my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

오름차순

# 새로운 리스트를 오름차순으로 정렬 (원본 리스트는 변경되지 않음)
sorted_list = sorted(numbers)
print(sorted_list)  # 출력: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

내림차순

# 새로운 리스트를 내림차순으로 정렬 (원본 리스트는 변경되지 않음)
sorted_list = sorted(numbers, reverse=True)
print(sorted_list)  # 출력: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

원본리스트는 그대로 유지

# 원본 리스트는 그대로 유지됨
print(numbers)  # 출력: [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

sorted 함수를 사용한 튜플 정렬(다중 정렬)

=> lambda식 사용 : sorted( tuple, key=lambda x: x[0])

리스트 내 튜플로 구성된 데이터

# fruits 리스트 내 튜플로 구성된 데이터
fruits = [('apple', 3), ('banana', 1), ('cherry', 2), ('cherry', 3),  ('mango', 1),  ('mango', 2)]

기준 1개:0번 인덱스 기준 오름차순

# 0번째 인덱스를 기준으로 오름차순 정렬
sorted_fruits = sorted(fruits, key=lambda x: x[0])

# 정렬된 결과 출력
for fruit in sorted_fruits:
    print(fruit)
('apple', 3)
('banana', 1)
('cherry', 2)
('cherry', 3)
('mango', 1)
('mango', 2)

기준 1개:0번 인덱스 기준 내림차순

# 0번째 인덱스를 기준으로 내림차순 정렬
sorted_fruits = sorted(fruits, key=lambda x: -x[0])

# 정렬된 결과 출력
for fruit in sorted_fruits:
    print(fruit)
('mango', 2)
('mango', 1)
('cherry', 3)
('cherry', 2)
('banana', 1)
('apple', 3)

 

기준 2개:0번 인덱스 기준 내림차순, 1번 인덱스 기준 오름차순 

# 0번째 인덱스를 기준으로 오름차순 정렬, 그 후 1번째 인덱스를 기준으로 내림차순 정렬
sorted_fruits = sorted(fruits, key=lambda x: (x[0], -x[1]))

# 정렬된 결과 출력
for fruit in sorted_fruits:
    print(fruit)

 

('apple', 3)
('banana', 1)
('cherry', 3)
('cherry', 2)
('mango', 2)
('mango', 1)

sort 와 sorted의 차이점

원본 리스트 변경:

sort: 원본 리스트를 직접 변경하며, 정렬된 결과를 반환하지 않습니다.
sorted: 원본 리스트를 변경하지 않고, 정렬된 결과를 새로운 리스트로 반환합니다.

사용 방법:

sort: 리스트 객체의 메서드로 사용됩니다.
sorted: 내장 함수로 사용됩니다.

반환 값:

sort: 반환 값이 없으며, None을 반환하며, 원본 리스트를 변경합니다.
sorted: 정렬된 새로운 리스트를 반환하며, 원본 리스트는 변경되지 않습니다.

 

위 차이점을 이해하시고

정렬을 구현할 때 필요한 함수, 메소드를 사용하시면 도움될 것 같습니다.