반응형
파이썬에는 기본적으로 정렬 가능한 라이브러리 주어진다.
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) 으로 사용되었다.
반응형
'Algorithm > 이것이 코딩테스트다' 카테고리의 다른 글
[Python][이코테] 성적이 낮은 순서로 학생 출력하기 (1) | 2022.10.08 |
---|---|
[Python][이코테] 위에서 아래로 (0) | 2022.10.07 |
[Python][이코테] 계수 정렬 (0) | 2022.09.17 |
[Python][이코테] 퀵 정렬 (0) | 2022.09.13 |
[Python][이코테] 삽입 정렬 (0) | 2022.08.31 |
댓글