[python] 정렬함수(sort() vs sorted())

728x90

1. sort()와 sorted()의 차이

파이썬에서 반복가능한 객체를 정렬하기 위해서는 sort함수와 sorted함수가 있습니다. 

 

이 두가지 함수는 여러가지 차이점을 가지고 있기 때문에 잘 알고 사용해야합니다.

 

먼저 sorted 함수는 기존 자료를 정리한 후 새로운 객체로 반환합니다. 따라서 기존 자료는 수정되지 않습니다.

 

예제를 통해 살펴보겠습니다.

list_b = ["aa","ccc","bb","ddddd","eeee"]

print(list_b) #출력: ['aa', 'ccc', 'bb', 'ddddd', 'eeee']
sorted_b = sorted(list_b) # 새로운 객체 생성
print(sorted_b) #출력: ['aa', 'bb', 'ccc', 'ddddd', 'eeee']
print(list_b) #출력: ['aa', 'ccc', 'bb', 'ddddd', 'eeee'] -> 원본은 수정되지 않음

 

반면에 sort함수는 새로운 값을 반환하지 않습니다. 대신에 기존 자료를 변경시킵니다.

 

아래 예제를 통해 확인해보겠습니다.

list_b = ["aa","ccc","bb","ddddd","eeee"]
print(list_b) #출력: ['aa', 'ccc', 'bb', 'ddddd', 'eeee']
print(list_b.sort(),list_b) # 출력: None  ['aa', 'bb', 'ccc', 'ddddd', 'eeee'] -> 원본이 직접 변경

 

sort함수를 호출한 후 기존 자료를 출력해보면 자료가 변경되어있는 것을 확인할 수 있습니다.

따라서 두 함수의 차이를 고려하여 사용해야 합니다.

 

2. 옵션

정렬함수의 옵션은 reverse, key=len, key=함수 등등이 있습니다.

이 옵션은 sort()함수나 sorted()함수 모두 동일하게 사용할 수 있습니다.

 

단 len은 길이가 측정가능한 자료형, 즉 반복가능한 자료형에서만 사용할 수 있습니다.

 

예제)

list_b = ["aa","ccc","bb","ddddd","eeee"]

print(sorted(list_b,reverse=True)) #출력: ['eeee', 'ddddd', 'ccc', 'bb', 'aa'] -> 역순
print(sorted(list_b,key=len)) #출력: ['aa', 'bb', 'ccc', 'eeee', 'ddddd'] -> 글자 길이순으로 출력
print(sorted(list_b,key=lambda x :x[-1])) #출력: ['aa', 'bb', 'ccc', 'eeee', 'ddddd'] -> 마지막 글자의 알파벳 순서대로 출력
print(sorted(list_b,key=lambda x :x[-1],reverse=True)) #출력: ['eeee', 'ddddd', 'ccc', 'bb', 'aa'] -> 위 결과의 역순으로 출력

list_b.sort(reverse=True)
print(list_b) #출력: ['eeee', 'ddddd', 'ccc', 'bb', 'aa']
list_b.sort(key=len)
print(list_b) #출력: ['bb', 'aa', 'ccc', 'eeee', 'ddddd']
list_b.sort(key=lambda x :x[-1])
print(list_b) #출력: ['aa', 'bb', 'ccc', 'ddddd', 'eeee']
list_b.sort(key=lambda x :x[-1], reverse=True)
print(list_b) #출력: ['eeee', 'ddddd', 'ccc', 'bb', 'aa']