알고리즘SOLUTION/1장 정렬

파이썬에서 정렬을 사용하는 방법

우선 정렬은 여러분들도 쉽게 아는 것처럼 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)

 

여기까지, 파이썬에서 정렬을 사용하는 방법에 대해서 알아보았습니다 !