sorted함수는 iterable한 객체를 정렬하는 함수입니다. 내부적으로는 팀 소트 (Tim sort) 라는 알고리즘을 사용하는데, 여기서는 팀 소트의 원리보다는 sorted 함수의 활용을 중심으로 알아보겠습니다.
목차
1. Sorted 기본
2. Reverse 옵션
3. Key 옵션
sorted의 reference는 다음과 같습니다.
sorted(iterable[, cmp[, key[, reverse]]]) # cmp는 3.0부터 삭제
따라서 iterable을 필요로 하며, key와 reverse 옵션을 사용할 수 있습니다.
1. Sorted 기본
sorted 함수는 iterable을 매개변수로 받으며, 해당 변수를 정렬된 상태로 리턴합니다.
list_ex = [1,3,4,2,5,6,3]
list_sorted = sorted(list_ex)
print(list_sorted)
# result : [1, 2, 3, 3, 4, 5, 6]
iterable하기만 하면 모두 함수를 적용시킬 수 있으므로 string도 정렬이 가능합니다.
string_ex = 'string'
string_sorted = sorted(string_ex)
print(string_sorted)
# result : ['g', 'i', 'n', 'r', 's', 't']
위의 결과와 같이, string에 대해 sorted 함수를 적용하면 list[char] 꼴로 리턴합니다.
2. Reverse 옵션
sorted는 기본적으로 오름차순 정렬입니다. 이때 reverse 옵션을 이용해 내림차순으로 정렬할 수도 있습니다.
list_ex = [1,3,4,2,5,6,3]
list_sorted = sorted(list_ex, reverse = True)
print(list_sorted)
# result : [6, 5, 4, 3, 3, 2, 1]
3. Key 옵션
sorted 함수는 key라는 매개변수를 이용하여 강력하게 활용할 수 있는데, 일반적인 함수를 이용하여 사용할 수도 있지만 lambda 함수를 사용하는 것이 간결합니다.
아래의 예시는 단어와 단어의 인덱스로 이루어진 string들을 인덱스 순서로 정렬하는 코드입니다.
words = ['apple 1', 'coding 5', 'synthesizer 2', 'piano 4', 'programming 3']
words_sorted = sorted(words, key = lambda x : x[-1])
# string의 마지막 char를 기준으로 정렬
print(words_sorted)
# result : ['apple 1', 'synthesizer 2', 'programming 3', 'piano 4', 'coding 5']
lambda를 이용하여 sorting의 기준을 마지막의 숫자로 설정하였습니다.
이때 key 옵션의 동작 원리를 간단히 알아보자면,
우선 lambda 함수의 x에는 words의 각 원소들이 차례대로 대입되며, 람다 함수에 의해 x[-1]이 리턴됩니다.
이에 따라 ['1', '5', '2', '4', '3'] 의 새로운 리스트가 만들어지며, 이를 정렬하는 순서대로 words의 원소들이 정렬됩니다.
(제가 이해한 방식대로 설명한 것이며, 실제 내부적 동작 원리를 설명한 것이 아닙니다)
'파이썬(Python) > 문법 내용정리' 카테고리의 다른 글
| F-string (가장 강력한 print 방법) (0) | 2021.01.28 |
|---|---|
| Enumerate 함수 (0) | 2021.01.27 |
| Comprehension (List, Set, Dict) (0) | 2021.01.24 |
| Lambda Function (람다 함수) (0) | 2021.01.24 |
| # 00. 카테고리 소개 (0) | 2021.01.23 |
댓글