[Python] 파이썬 리스트 list 정렬 | sort sorted 차이 | 내림차순 , 올림차순

파이썬 포함 어떤 언어를 사용해서 코딩을 하던 데이터를 정렬해야 하는 경우가 매우 많은 거 같습니다.

본 포스팅에서는 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) # 정렬된 리스트 출력 

결과값:

list.sort() 결과값 문자열

알파벳 소문자 문자열들로 구성된 리스트를 알파벳순으로 정렬해줍니다.

만약에 대소문자가 섞인 리스트의 경우 대문자 알파벳들을 먼저 알파벳 순으로 정렬해주고, 소문자들이 대문자들 뒤에 알파벳순으로 정렬됩니다.

sort 함수는 이렇게 특정한 기준을 가지고 리스트 안 요소들을 비교해서 정렬합니다. 숫자 리스트의 경우 그 음수, 0, 양수 그 값 자체의 크기가 비교대상이고, 문자열 리스트의 경우 아스키 코드 값이 그 비교대상입니다.

문자열 정렬 기준
아스키코드 (Ascii code)

ascii 코드 테이블
사진출처: https://blog.naver.com

간단하게 말하자면 각각의 문자들은 고유 10진수를 가지고 있는데 이 숫자들을 비교해 어떤 문자 값이 더 크고 작은지를 비교해서 정렬하는 것입니다. 대문자들의 경우 65 ~ 90 까지고, 소문자들의 경우 97 ~ 122까지이기 때문에 항상 대문자들이 먼저 알파벳순으로 정렬되어 앞순으로 나오고 그 후 소문자들이 정렬되어 나오는 형식인 것입니다.

단어 문자열 정렬

list_words = ['cake', 'abraca', 'cape', 'dabra', 'can'] # 단어 리스트

list_words.sort() # 단어 리스트 정렬

print(list_words) # 단어 리스트 출력 

결과값:

list.sort() 결과값 단어 문자열

단순 알파벳들이 아닌 문자열 단어들의 경우 맨 앞에 문자부터 아스키 코드 값과 비교해서 정렬합니다. 아스키 코드 값이 같은 경우 그 다음 문자를 비교해서 문자열들의 정렬 순서를 가립니다.

파이썬 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) # 새로 정열되어 생성된 리스트 출력

결과값:

sorted(list) 알파벳 문자열

단어 문자열 정렬

list_words = ['cake', 'abraca', 'cape', 'dabra', 'can'] # 단어 리스트

new_list = sorted(list_words) # 단어 리스트 정렬

print(new_list) # 단어 리스트 출력 

결과값:

sorted(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) 

결과값:

reverse list.sort()

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 sorted(list)

이렇게 예시를 통해 볼 수 있듯이 reverse=True를 넣어서 내림차순으로 정렬방식을 변경 할 수 있고 reverse=False를 넣어서 올림차순으로 정렬할 수 있습니다.

하지만 올림차순으로 정렬하는 경우 reverse=False가 기본 옵션 값이기 때문에 따로 옵션을 정의하지 않으셔도 됩니다. (기본 과 reverse=false 의 결과값이 같다)

답글 남기기