우선 정렬은 여러분들도 쉽게 아는 것처럼 2개 이상의 데이터를 순차적으로 나열하는 것을 의미합니다.
그렇다면, 프로그래밍 과정에서 왜 정렬을 해야할까요?
우선 데이터가 수백 개, 수천 개, 수백만 개가 된다면 순차탐색 이외의 다른 알고리즘을 사용할 수 없습니다.
하지만! 데이터가 정렬되어있다면 우리는 이진 탐색이라는 강력한 알고리즘을 사용할 수 있어요.
이진 탐색은 데이터를 조회하는 경우에 아주 효과적인 알고리즘입니다.
대부분의 경우 삽입, 삭제보다는 데이터를 조회하는 것이 압도적으로 많기 때문에 우리가 프로그래밍 과정에서 정렬을 해야하는 이유 중 가장 큰 이유가 바로 이진 탐색이 가능한 데이터를 만들기 위해서입니다.
그렇다면, 파이썬에서 정렬은 어떻게 사용할까요?
우선 파이썬에서는 sort()와 sorted()의 메소드를 사용하여 정렬을 할 수 있습니다.
sorted의 경우에는 기존의 리스트를 변경하는 것이 아닌 정렬된 새로운 리스트를 반환하는 특징을 가지고 있습니다.
sort의 경우에는 기존의 리스트를 변경하게 됩니다.
이것의 차이가 무엇이냐면
a = [5,3,4,2,1] 일 때,
sorted(a)
print(a)
의 출력 결과는 그대로 [5,3,4,2,1] 입니다.
왜냐하면 sorted()는 새로운 리스트를 반환해주기 때문에
a = sorted(a) 라고 해야 정렬된 새로운 리스트가 다시 a에 적용되는 것이기 때문입니다.
a = [5,3,4,2,1]
a.sort()
print(a)
의 출력 결과는 [1,2,3,4,5]가 됩니다.
sorted()와 sort()의 기본 정렬값은 오름차순입니다. 만약 내림차순으로 정렬을 하고 싶다면
a.sort(reverse=True)
sorted(a,reverse=True)
처럼 reverse=True 인자를 넣어주시면 됩니다.
이 외에도, key값을 따로 정해서 정렬기준을 선택할 수 있습니다.
예를들어
a = [ (5,'a'), (3,'c'), (8,'f'), (2,'b') ]
리스트가 튜플로 이루어진 구조로 되어있을 때, 뒤에 있는 문자를 기준으로 정렬을 하고 싶어요.
그럴 때에는
a.sort(key=lambda x: x[1])
즉, lambda 함수를 사용하여 튜플의 인덱스인 (0,1) 중 1에 접근하여 정렬을 할 수 있습니다.
만약 숫자를 기준으로 정렬하고 싶다면 a.sort(key=lambda x: x[0]) 으로 할 수 있겠죠?
이 경우에도, 내림차순으로 정렬하고 싶다면 마지막에 reverse=True 인자를 넣어주시면 됩니다.
a.sort(key=lambda x: x[1], reverse=True)
여기까지, 파이썬에서 정렬을 사용하는 방법에 대해서 알아보았습니다 !
'알고리즘SOLUTION > 1장 정렬' 카테고리의 다른 글
백준 2822 파이썬 점수계산 해답 (0) | 2021.03.31 |
---|---|
백준 1181 파이썬 단어정렬 해답 (0) | 2021.03.31 |
백준 1026 파이썬 보물 해답 (0) | 2021.03.31 |
파이썬 코딩테스트에 자주나오는 정렬문제 무엇이 있을까? (0) | 2021.03.31 |