Algorithm/이것이 코딩테스트다

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

애기 개발자 2022. 10. 6. 17:50
반응형

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

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) 으로 사용되었다.

반응형