파이썬 포함 어떤 언어를 사용해서 코딩을 하던 데이터를 정렬해야 하는 경우가 매우 많은 거 같습니다.
본 포스팅에서는 sort() 그리고 sorted() 내장 함수를 이용해 오름차순 또는 내림차순으로 리스트 자료형을 정렬하는 방법, 작동원리 그리고 두 함수의 차이에 대해 알아보겠습니다.
파이썬 sort() 함수 사용법
‘리스트 객체’.sort() 메소드는 list 객체 안에 있는 요소들을 정렬해주는 함수입니다. 오직 리스트에만 사용이 가능한데 그 말인 즉, list 객체 메소드입니다.
‘리스트 객체’.sort()를 사용하시면 리스트를 오름차순으로 정렬해줍니다.
파이썬 sort 예시
숫자 리스트 정렬
list_num = [48, -33, 20, 31, -40, 96, 23, -66, 68, 47] # 숫자 리스트
list_num.sort() # 숫자 리스트 정렬
print(list_num) # 정렬된 리스트 출력
결과값:
원래 숫자 리스트에는 음수와 양수가 골고루 섞여있었지만 작은 숫자부터 큰 숫자까지 오름차순으로 리스트가 정렬되어진 것을 확인 할 수 있습니다.
알파벳 문자열 정렬
list_alphabet = ['z', 'p', 'q', 'l', 'k', 'd', 'v', 'w', 's', 'm'] # 소문자 리스트
list_alphabet.sort() # 소문자 리스트 정렬
print(list_alphabet) # 정렬된 리스트 출력
결과값:
알파벳 소문자 문자열들로 구성된 리스트를 알파벳순으로 정렬해줍니다.
만약에 대소문자가 섞인 리스트의 경우 대문자 알파벳들을 먼저 알파벳 순으로 정렬해주고, 소문자들이 대문자들 뒤에 알파벳순으로 정렬됩니다.
sort 함수는 이렇게 특정한 기준을 가지고 리스트 안 요소들을 비교해서 정렬합니다. 숫자 리스트의 경우 그 음수, 0, 양수 그 값 자체의 크기가 비교대상이고, 문자열 리스트의 경우 아스키 코드 값이 그 비교대상입니다.
문자열 정렬 기준
아스키코드 (Ascii code)
간단하게 말하자면 각각의 문자들은 고유 10진수를 가지고 있는데 이 숫자들을 비교해 어떤 문자 값이 더 크고 작은지를 비교해서 정렬하는 것입니다. 대문자들의 경우 65 ~ 90 까지고, 소문자들의 경우 97 ~ 122까지이기 때문에 항상 대문자들이 먼저 알파벳순으로 정렬되어 앞순으로 나오고 그 후 소문자들이 정렬되어 나오는 형식인 것입니다.
단어 문자열 정렬
list_words = ['cake', 'abraca', 'cape', 'dabra', 'can'] # 단어 리스트
list_words.sort() # 단어 리스트 정렬
print(list_words) # 단어 리스트 출력
결과값:
단순 알파벳들이 아닌 문자열 단어들의 경우 맨 앞에 문자부터 아스키 코드 값과 비교해서 정렬합니다. 아스키 코드 값이 같은 경우 그 다음 문자를 비교해서 문자열들의 정렬 순서를 가립니다.
파이썬 sorted 함수 사용법
sorted 함수와 sort 함수는 거의 동일한 방식으로 작동됩니다. 하지만, 사용 문법이 조금 다릅니다.
‘정렬된 리스트’ = sorted(‘리스트 객체’)를 사용하시면 리스트를 오름차순으로 정렬하고 새로 정렬된 리스트를 반환합니다.
예시를 통해 알아봅시다.
파이썬 sorted 예시
숫자 리스트 정렬
list_num = [48, -33, 20, 31, -40, 96, 23, -66, 68, 47] # 숫자 리스트
new_list = sorted(list_num) # sorted() 함수 호출
print(new_list) # 새로 정열되어 생성된 리스트 출력
결과값:
알파벳 문자열 정렬
list_alphabet = ['z', 'p', 'q', 'l', 'k', 'd', 'v', 'w', 's', 'm'] # 소문자 리스트
new_list = sorted(list_alphabet) # sorted() 함수 호출
print(new_list) # 새로 정열되어 생성된 리스트 출력
결과값:
단어 문자열 정렬
list_words = ['cake', 'abraca', 'cape', 'dabra', 'can'] # 단어 리스트
new_list = sorted(list_words) # 단어 리스트 정렬
print(new_list) # 단어 리스트 출력
결과값:
파이썬 sort sorted 차이
위에 예시들을 통해 볼 수 있었듯이 sort 함수와 sorted 함수의 결과값들은 동일합니다.
가장 큰 차이라 하면 sorted 함수는 주어진 리스트들의 요소들을 가지고 정렬을 한 후 이를 가지고 ‘새로운 리스트‘를 만들어 반환해줍니다. 때문에 기존 리스트는 그대로 유지되고 새로운 요소들의 순서를 가진 리스트가 생성되기 때문에 꼭 변수에 저장해주어야합니다. sort 함수는 ‘주어진 리스트‘의 정렬 순서를 바꿉니다.
파이썬 오름차순, 내림차순 정렬
sort 함수와 sorted 함수 모두 오름차순으로 정렬을 할 것인지 내림차순으로 할 것인지 정할 수 있습니다.
바로 reverse 옵션을 통해서 말이죠.
sort
a = [12, 5, 9, 2, 1, 90, 0, 5]
b = [12, 5, 9, 2, 1, 90, 0, 5]
c = [12, 5, 9, 2, 1, 90, 0, 5]
a.sort()
b.sort(reverse=False)
c.sort(reverse=True)
print("기본:",a)
print("reverse=false:",b)
print("reverse=True:",c)
결과값:
sorted
a = [12, 5, 9, 2, 1, 90, 0, 5]
print("기본:",sorted(a))
print("reverse=false:",sorted(a,reverse=False))
print("reverse=True:",sorted(a,reverse=True))
결과값:
이렇게 예시를 통해 볼 수 있듯이 reverse=True를 넣어서 내림차순으로 정렬방식을 변경 할 수 있고 reverse=False를 넣어서 올림차순으로 정렬할 수 있습니다.
하지만 올림차순으로 정렬하는 경우 reverse=False가 기본 옵션 값이기 때문에 따로 옵션을 정의하지 않으셔도 됩니다. (기본 과 reverse=false 의 결과값이 같다)