파이썬에서 정수(int), 실수(float), 문자열(str), 문자(char) 또는 __cmp__ 메서드가 구현된 클래스의 객체로 이루어진 리스트는 sort() 메서드를 호출하는 것만으로 간단하게 정렬할 수 있습니다. 리스트를 내림차순으로 정렬하고 싶다면 reverse 매개변수에 True를 전달하기만 하면 됩니다.
예제
my_list = [1, 5, 2, 6, 0] my_list.sort() print(my_list) my_list.sort(reverse=True) print(my_list)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
[0, 1, 2, 5, 6] [6, 5, 2, 1, 0]
튜플(tuple)은 불변(immutable) 자료형이기 때문에 직접 호출할 수 있는 제자리(in-place) 정렬 메서드가 없습니다. 이 경우에는 정렬된 새로운 리스트를 반환하는 sorted() 함수를 사용해야 합니다. 원본 리스트를 변경하지 않고 정렬된 결과를 얻고 싶을 때도 리스트 클래스 메서드인 sort() 대신 sorted()를 사용하면 됩니다.
예제
my_list = [1, 5, 2, 6, 0] print(sorted(my_list)) print(sorted(my_list, reverse=True))
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
[0, 1, 2, 5, 6] [6, 5, 2, 1, 0]
클래스에 __cmp__ 메서드가 구현되어 있지 않은 객체들로 이루어진 리스트라면 key 인자를 사용해 두 요소를 비교하는 기준을 직접 지정할 수 있습니다. 예를 들어, 딕셔너리들이 담긴 리스트를 'size' 키 값을 기준으로 정렬하고 싶다면 다음과 같이 작성할 수 있습니다.
예제
def get_my_key(obj):
return obj['size']
my_list = [{'name': "foo", 'size': 5}, {'name': "bar", 'size': 3}, {'name': "baz", 'size': 7}]
my_list.sort(key=get_my_key)
print(my_list)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
[{'name': 'bar', 'size': 3}, {'name': 'foo', 'size': 5}, {'name': 'baz', 'size': 7}]
key에 지정된 함수는 리스트의 각 요소마다 한 번씩 호출되며, 해당 함수가 반환한 값을 기준으로 정렬이 수행됩니다. 같은 원리로 객체의 특정 속성(attribute)을 반환하는 함수를 지정하면 객체 리스트도 손쉽게 정렬할 수 있습니다.
참고로, 별도의 함수를 정의하지 않고 람다(lambda) 표현식을 활용하면 더욱 간결하게 작성할 수 있습니다. 위 예제는 my_list.sort(key=lambda obj: obj['size'])처럼 한 줄로 대체할 수 있어 실무에서 널리 사용되는 패턴입니다.