티스토리 뷰

 

안녕하세요 탐구소년입니다. 오늘은 파이썬 리스트 관련 함수, 즉 메소드 중 하나인 sort()의 사용법에 대해서 정리를 해보려고 합니다. 

 

 

sort()는 이름 그대로 파이썬 리스트를 정렬해주는 함수입니다. 여기에서 정렬이란 일정한 규칙에 따라 나열하는 것을 의미합니다.

인자를 전달하지 않고 sort()를 호출하게 되면, 기본적으로 오름차순 정렬이 이루어집니다. 

 

코드

1
2
3
numbers = [32154]
numbers.sort() # 오름차순 정렬이 진행된다(기본 사항).
print(numbers)

결과

1
[12345]

 

 

인자를 전달하지 않았을 경우에는 sort()의 모든 사항이 기본 사항대로 진행이 됩니다. 이때 기본 사항인 오름차순 정렬이 아닌 내림차순 정렬을 진행하고 싶다면 매개변수 중 reverse의 값을 따로 지정하여 호출해주면 됩니다. 

 

코드

1
2
3
4
# 내림차순 정렬 진행하기 위한 sort()의 호출
numbers = [32154]
numbers.sort(reverse=True)
print(numbers)

결과

1
[54321]

 

 

같은 방법으로 문자열 멤버의 정렬로 가능합니다. 문자열은 기본적으로 알파벳 순서로 정렬됩니다. 

 

코드

1
2
3
4
# 알파벳 역순으로 문자열 멤버 정렬하기
veget = ["Banana""Carrot""Apple"]
veget.sort(reverse=True)
print(veget)

결과

1
['Carrot''Banana''Apple']

 

 

위와 같이 숫자나 문자열의 경우 오름차순과 내림차순이 간단히 적용됩니다. 그런데 리스트의 멤버가 숫자나 문자열이 아닌 경우에는 어떻게 할까요? 튜플 멤버들로 구성된 리스트의 경우를 보겠습니다. 

 

코드 

1
2
3
4
# 튜플로 구성된 리스트를 정렬해보기 
tups = [("carry"2), ("amy"3), ("ben"1)]
tups.sort()
print(tups) 

결과

1
[('amy'3), ('ben'1), ('carry'2)]

 

튜플로 구성된 리스트를 대상으로 sort() 함수를 호출하면, 튜플의 첫번째 멤버(여기에서는 문자열)를 정렬의 대상으로 삼는 것을 확인할 수가 있습니다. 정렬의 대상이 되는 데이터를 키(key)라고 합니다. 만약 위 리스트를 대상으로 정렬의 대상이 되는 key를 바꾸어 정렬을 기본 사항과 다르게 진행하고 싶다면, sort() 함수의 key라는 매개변수를 지정하여 호출하면 됩니다. key 매개변수에는 각 요소로부터 key를 만들어낼 수 있도록 정의한 함수를 전달해주면 됩니다. 

 

위의 리스트를 각 튜플의 숫자로 정렬하기 위해, 함수를 아래와 같이 정의하였습니다.

1
2
3
# 튜플의 1번 인덱스 값(숫자)을 키로 사용한다
def getKey(tup) :
    return tup[1]

그리고 위 함수(함수의 이름)를 sort()의 key 매개변수에 지정해 줍니다. 

1
2
3
tups = [("carry"2), ("amy"3), ("ben"1)]
tups.sort(key=getKey)
print(tups)

위와 같이 코드를 작성하면, sort() 함수는 각각의 멤버를 한번씩 getKey() 함수에 인자로 전달합니다. 그러면 멤버의 수만큼 key가 반환되고, 반환된 key를 대상으로 정렬이 진행되는 것입니다. 결과는 아래와 같습니다.

1
[('ben'1), ('carry'2), ('amy'3)]

 

 

sort() 함수의 key 매개변수를 사용했을 때에도, reverse는 반대로 정렬하는 매개변수로써 역할을 할 수 있습니다. 그에 대한 코드와 결과를 보면서 마무리하도록 하겠습니다. 

 

코드

1
2
3
4
5
6
7
8
9
# 튜플의 1번 인덱스 값을 키로 사용한다
def getKey(tup) :
    return tup[1]
 
tups = [("carry"2), ("amy"3), ("ben"1)]
 
# getKey 함수의 방법대로 key를 지정하되, 정렬 방향은 반대이다
tups.sort(key=getKey, reverse=True)
print(tups)

결과

1
[('amy'3), ('carry'2), ('ben'1)]

 

 

 

 

댓글
공지사항