정렬 기능은 알고리즘 문제 풀이 뿐만 아니라 솔루션 및 웹사이트 등을 개발할 때에도 매우 중요한 기능이다.

오늘은 파이썬의 내장함수를 통한 기본 정렬 뿐 아니라 사용자 정의 기준에 따른 커스텀 정렬 방법까지 자세히 알아보고자 한다.


파이썬의 기본 정렬

파이썬에서 정렬을 수행하는 가장 기본적인 방법은 sorted() 메소드와 list 자료형의sort() 내장 메소드를 사용하는 것이다. 이 두 방법을 정렬된 결과를 메소드 하나로 쉽게 얻을 수 있도록 해준다.

 

1. sorted() 메소드

sorted() 메소드는 원본 리스트는 변경하지 않은 채 정렬된 새로운 리스트를 반환한다. 이 메소드는 리스트 뿐만 아니라 모든 반복 가능한 객체에서 사용할 수가 있다 (리스트, 튜플, 문자열 등).

 

sorted(iterable, key=None, reverse=False)와 같이 작성하는데, key와 reverse는 생략할 수 있다.

  • iterable: 정렬할 수 있는 반복 가능 객체
  • key: 정렬을 위한 기준이 되는 메소드, 람다식 지정 (Default: None)
  • reverse: 값이 참(True)이면 내림차순 정렬 (Default: False)
numbers = [3, 1, 4, 1, 5, 9, 2]
print(sorted(numbers))  #[1, 1, 2, 3, 4, 5, 9]

 

2. sort() 메소드

sort() 메소드는 리스트 객체만 사용할 수 있는 메소드로, 원본 리스트의 순서를 바꿔 정렬한다. 이 메소드는 따로 정렬된 리스트를 반환하지 않는다.

 

list.sort(key=None, reverse=False)와 같이 작성하고, 마찬가지로 key와 reverse를 생략할 수 있다.

numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers)  # 출력: [1, 1, 2, 3, 4, 5, 9]

 

파이썬의 커스텀 정렬

기본 정렬 방법에 응용하여, 파이썬에서는 key 매개변수를 사용해 커스텀 정렬을 할 수가 있다. 이를 통해 데이터의 특정 특성에 따라 맞춤형 정렬이 가능하다.

 

1. key 매개변수 내에 작성

key 매개변수는 정렬 기준을 정의하는 데에 사용된다. 이 매개변수 내에 전달 인자로 호출 가능한 함수 혹은 람다 함수를 전달해, 해당 함수의 반환 값을 기준으로 정렬이 이루어진다.

words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words)  #['date', 'apple', 'banana', 'cherry']

items = [(1, 2), (3, 1), (5, 4)]
sorted_items = sorted(items, key=lambda x: x[1])
print(sorted_items)  #[(3, 1), (1, 2), (5, 4)]

 

2. 사용자 정의 함수 생성

key 매개변수 내에 모두 작성하기에는 가독성이 좋지 않을 정도로 복잡한 기준이 필요한 경우에는 정렬을 위한 사용자 정의함수를 만들어 key의 전달 인자로 둘 수 있다.

def custom_sort(item):
    return item[1] - item[0]

pairs = [(1, 2), (2, 3), (3, 5)]
sorted_pairs = sorted(pairs, key=custom_sort)
print(sorted_pairs)  #[(1, 2), (2, 3), (3, 5)]
유영웅