본문 바로가기
Algorithm/이것이 코딩테스트다

[Python][이코테] sort, sorted 정렬

by 애기 개발자 2022. 10. 6.
반응형

파이썬에는 기본적으로 정렬 가능한 라이브러리 주어진다.

sort(), sorted()

 

위의 라이브러리는 퀵정렬과 비슷한 합병 정렬(Merge Sort) 기반으로 만들어졌으며

 

합병정렬은 퀵정렬보단 느리지만 최악의 경우에도 O(NlogN)을 보장한다.

 

sorted()

arr1 = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

result1 = sorted(arr1)
print(result1)

 

sort()

arr2 = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

arr2.sort()
print(arr2)

 

주의할 점은 

sorted()는 정렬된 값을 리턴하고 정렬 대상은 정렬되지 않는다.

sort()는 리턴값이 없으며 정렬하고자 하는 대상 자체를 정렬시킨다.

 

arr1 = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
print("sorted(arr1) - ", sorted(arr1)) #sorted(arr1) -  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("arr1 - ", arr1) #arr1 -  [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

arr2 = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] 
print("arr2.sort() - ", arr2.sort()) #arr2.sort() -  None
print("arr2 - ", arr2) #arr2 -  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

sorted(arr1)은 정렬된 결과를 보여주지만

arr1 만 출력하였을 땐 원래의 정렬되지 않은 리스트를 보여준다.

 

arr2.sort()는 None을 출력하는데 이는 리턴 값이 없기 때문에 None으로 나온 것이다.

arr2에 대한 정렬은 실행되었기 때문에

arr2를 출력하면 정렬된 리스트가 출력된다.

 

Key 활용

arr3 = [('바나나', 2), ('사과', 5), ('당근', 3)]
def setting(data):
    return data[1]
result3 = sorted(arr3, key=setting)
print(result3)
#[('바나나', 2), ('당근', 3), ('사과', 5)]

위의 코드는 리스트의 데이터가 튜플로 구성되어 있을 때 두 번째 값인 int형 수로 정렬을 하는 코드이다.

 

결괏값에서 보이듯 data[1]은 뒤의 숫자 값을 지칭하며 해당 값으로 오름차순 정렬된 list를 리턴하여 보여준다.

 

2022.10.04 - [Algorithm/백준] - [Python] 백준 1181번 - 단어 정렬

 

위의 문제에서는 sort(key = len) 으로 사용되었다.

반응형

댓글