[Python 내장 함수] sorted() : 데이터 정렬

 

 


1. sorted() 함수란?

 

파이썬에서 데이터(리스트, 튜플, 문자열, 딕셔너리)를 정렬하는 가장 기본적인 방법 중 하나는 sorted() 함수를 사용하는 방법입니다. sorted 함수는 원본 데이터를 수정하지 않고 새로운 정렬된 리스트를 반환합니다. 기본 구문은 아래코드와 같습니다. iterable은 정렬할 데이터 나타냅니다. key는 정렬 기준을 설정하는 매개변수입니다. reverse는 정렬 방향을 설정하는 매개 변수로 내림차순(True), 오름차순(False) 값을 가지고 있습니다.

 

sorted(iterable, key=None, reverse=False)

 


2. sorted() 함수 사용 예시

 

아래 코드는 sorted()함수를 사용하여 리스트를 정렬하는 코드입니다.

 

>>> numbers = [3, 1, 4, 2]
>>> sorted_numbers = sorted(numbers)
>>> print(sorted_numbers)  

# 결과: [1, 2, 3, 4]

 


아래 코드는 sorted()함수를 사용하여 문자열을 정렬하는 코드입니다.

 

>>> text = "python"
>>> sorted_text = sorted(text)
>>> print(sorted_text)  

# 결과: ['h', 'n', 'o', 'p', 't', 'y']

 


아래 코드는 sorted()함수를 사용하여 튜플을 정렬하는 코드입니다.

 

>>> fruits = ('apple', 'banana', 'cherry', 'grape')
>>> sorted_fruits = sorted(fruits)
>>> print(sorted_fruits) 

# 결과: ['apple', 'banana', 'cherry', 'grape']

 


아래 코드는 sorted()함수를 사용하여 딕셔너리를 정렬하는 코드입니다.

 

>>> fruits_price = {'apple': 3000, 'banana': 2000, 'cherry': 5000, 'grape': 4000}
>>> sorted_fruits_price = sorted(fruits_price)
>>> print(sorted_fruits_price)  

# 결과: ['apple', 'banana', 'cherry', 'grape']

 


sorted()함수는 기본적으로 오름차순으로 정렬을 합니다. reverse를 True로 설정하면 내림차순으로 정렬할 수 있습니다. 아래 코드는 동일한 리스트에 오름차순 정렬, 내림차순 정렬을 하는 코드입니다.

 

>>> numbers = [3, 1, 4, 2]
>>> sorted_numbers = sorted(numbers)
>>> print(sorted_numbers)  
# 결과: [1, 2, 3, 4]

>>> numbers = [3, 1, 4, 2]
>>> sorted_numbers = sorted(numbers, reverse=True)
>>> print(sorted_numbers)  
# 결과: [4, 3, 2, 1]

 


key 매개 변수를 사용하면 정렬 기준을 변경할 수 있습니다. 아래 코드는 key 매개변수에 second 함수를 전달하여 정렬 기준을 튜플의 두 번째 요소로 설정하고 정렬하는 코드입니다.

 

>>> def second(elem):
>>>     return elem[1]

>>> data = [(1, 4), (2, 2), (3, 1), (4, 3)]
>>> sorted_data = sorted(data, key=second)
>>> print(sorted_data)  

# 결과: [(3, 1), (2, 2), (4, 3), (1, 4)]

 


아래 코드는 숫자와 문자열이 혼합된 리스트를 정렬하는 예제입니다. sort_key(x) 함수는 입력받은 x가 문자열인지 확인하고, 문자열이면 (True, x)를 반환하고, 그렇지 않으면 (False, x)를 반환합니다. 여기서 (True, x)와 (False, x)는 튜플입니다.  key 매개변수에 튜플을 전달하면 다음과 같이 정렬합니다. 튜플의 첫 번째 요소가 True 인 문자열과 False인 숫자를 구분하여 정렬하고, 동일한 첫 번째 요소를 가진 경우 두 번째 요소를 기준으로 정렬합니다. 이렇게 하면 숫자와 문자열이 각각 오름차순으로 정렬된 리스트가 출력됩니다. (쉽게 이야기 하면 튜플의 첫 번째 요소 기준으로 먼저 정렬하고 다음에 두 번째 요소를 기준으로 정렬한다는 말)

 

def sort_key(x):
    if isinstance(x, str):
        return (True, x)
    else:
        return (False, x)

mixed_list = [3, 'apple', 1, 'banana', 4, 'cherry', 2, 'grape']
sorted_mixed_list = sorted(mixed_list, key=sort_key)
print(sorted_mixed_list)  # 결과: [1, 2, 3, 4, 'apple', 'banana', 'cherry', 'grape']

 

 

isinstance()함수 

isinstance()함수는 두 개의 인자를 받으며, 첫 번째 인자는 확인할 객체, 두 번째 인자는 클래스 정보입니다. 주어진 객체가 전달된 클래스 정보에 속하는지 확인하고 그 결과를 True 또는 False로 반환합니다. 이 함수를 사용하면 객체의 타입을 쉽게 확인할 수 있습니다.

 

 

key= sort_key함수에 인자를 전달하지 않는이유

sorted() 함수의 key 매개변수에 함수 이름만 전달하는 이유는, sorted() 함수가 내부적으로 리스트의 각 원소를 key 함수에 전달하여 정렬 기준을 얻기 때문입니다. 따라서, key=sort_key 부분에 인자를 직접 전달할 필요가 없습니다.