<청춘> 격정적으로 사는 것

밤을 새고 공부한 다음 날 새벽에 느꼈던 생생한 환희와 야생적인 즐거움을 잊을 수 없다

파이썬 Python

[파이썬 Python] 정렬 라이브러리 / sorted() , sort() , key 값

수학도 2021. 6. 15. 21:40

sorted()

파이썬은 기본 정렬 라이브러리인 sorted() 함수를 제공한다.

sorted() 는 병합 정렬을 기반으로 만들어졌는데, 병합 정렬은 일반적으로 퀵 정렬보다 느리지만 최악의 경우에도 시간 복잡도 O(NlogN)을 보장한다는 특징이 있다. sorted() 함수는 정렬된 결과를 리스트 자료형으로 반환한다.

  • 파이썬은 병합 정렬과 삽입 정렬의 아이디어를 더한 하이브리드 방식의 정렬 알고리즘을 사용하고 있다.

 

sort()

리스트 객체의 내장함수인 sort() 는 리스트 변수가 하나 있을 때 내부 원소를 바로 정렬한다.

이를 이용하면 별도의 정렬된 리스트가 반환되지 않고 내부 원소가 바로 정렬된다.

 

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

# sorted() 정렬 : 정렬된 리스트가 반환됨, array 는 그대로
result = sorted(array)
print(result)
print(array)

# sort() 정렬 : 내부 원소가 바로 정렬됨
array.sort()
print(array)
# sorted() 정렬 반환 결과를 담은 result 와 array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

# sort() 정렬된 array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 

key 값

또한 sorted() 나 sort() 를 이용할 때에는 key 매개변수를 입력으로 받을 수 있다. key 값으로는 하나의 함수가 들어가야 하며 이는 정렬 기준이 된다. 

array = [('바나나', 2), ('사과', 5), ('당근', 3)]

# 방법 1 : 함수를 정의한 후 key 값에 넣어주기
def setting(data):
    return data[1]      # 인덱스 1에 위치한 원소가 반환된다 (key 값 = 2, 5, 3)

result = sorted(array, key = setting)
print(result)

# 방법 2 : 람다함수를 key 값에 넣어주기
result = sorted(array, key = lambda data: data[1])
print(result)
[('바나나', 2), ('당근', 3), ('사과', 5)]
[('바나나', 2), ('당근', 3), ('사과', 5)]

 

정렬 라이브러리의 시간 복잡도

정렬 라이브러리는 항상 최악의 경우에도 시간 복잡도 O(NlogN)을 보장한다.