파이썬으로 코딩테스트를 준비하며 잊고있던 파이썬 문법을 하나씩 찾아보는 중이다. 이번엔 sort()와 sorted() 함수에 대해서 알아보겠다.
일반적으로 파이썬으로 정렬을 할 때 sorted() 나 .sort() 를 사용한다.
list.sort()는 파이썬 내장 메서드로, 리스트를 제자리에서 수정한다. 일반적으로 sorted() 보다 덜 편리하지만 원래 목록이 필요하지 않다면 이것이 약간 더 효율적이다.
sorted()는 이터러블로부터 새로운 정렬된 리스트를 만드는 내장함수이다. (sort()는 리스트에게만 정의되지만, sorted() 함수는 모든 이터러블을 받아들인다.)
오름차순과 내림차순
a = [1, 10, 5, 7, 6]
a.sort() # 오름차순 정렬
print(a) # [1, 5, 6, 7, 10]
a.sort(reverse = True) # 내림차순 정렬
print(a) # [10, 7, 6, 5, 1]
b = [2, 7, 5, 1, 9]
print(sorted(b)) # 오름차순 정렬
print(sorted(b, reverse = True)) # 내림차순 정렬
list.sort()에 아무 매개변수도 넣지 않는다면 오름차순으로 정렬하고, reverse = True를 넣는다면 내림차순으로 정렬된다.
sorted() 함수도 마찬가지로 리스트 이름만 넣는다면 오름차순으로 정렬되고, reverse = True 값을 넣어주면 내림차순으로 정렬된다.
키함수
list.sort()와 sorted() 함수는 모두 비교하기 전에 각 리스트 요소에 대해 호출할 함수를 지정하는 key 매개변수를 가진다.
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
sorted(student_tuples, key=lambda student: student[2]) # sort by age
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
key값에 lambda를 이용해 특정 요소에 대해 정렬을 수행할 수도 있다. 위의 코드는 student_tuples[2]의 값인 나이를 오름차순으로 정렬한 것이다. 이 때 lambda 뒤의 student는 다른 문자를 써도 무방하다. (x: x[2] 등)
e = [(1, 3), (0, 3), (1, 4), (1, 5), (0, 1), (2, 4)]
f = sorted(e, key = lambda x : (x[0], -x[1]))
# f = [(0, 3), (0, 1), (1, 5), (1, 4), (1, 3), (2, 4)]
아이템 첫 번째 인자를 오름차순으로 먼저 정렬하고, 그 안에서 다음 두 번째 인자를 기준으로 내림차순으로 정렬하고 싶다면 위와 같이 할 수도 있다.
'Algorithm > Python' 카테고리의 다른 글
[Python] 파이썬 sum 함수 (0) | 2021.11.26 |
---|