본문 바로가기
파이썬(Python)/문법 내용정리

Sorted 함수

by HealingMusic 2021. 1. 23.

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

댓글