-
List 정렬 기준, iterable객체의 요소가 iterable 일 때Today_I_Learned/Python 2023. 11. 1. 16:17
작성 의도
반복 가능한(iterable) 객체의 모든 Element 역시 반복 가능한 객체 일 때 (ex. 2차원 List, [(1, 2, 3), (4, 5, 6), …] 등) sort()나 sorted() 함수를 이용하여 정렬을 진행하면 python에서는 기본적으로 각 Element의 첫 번째 요소를 기준으로 오름차순 정렬을 수행한다.
그러나 각 Element의 첫 번째가 아닌, 특정 순서의 값으로 정렬을 진행하고 싶은 경우엔 sorted() 나 List의 내장 함수인 sort() 함수의 key parameter를 잘 활용해야 한다. (* key parameter는 함수(callable)를 인자로 받는다.)
다음 글을 읽으면 key parameter를 통해 함수를 여러 번 호출하지 않고도 복잡한 정렬을 한 번에 수행하는 방법에 대해 학습하게 된다.
1. 각 Element의 (첫 번째가 아닌) 특정 순서의 값으로 정렬을 하고 싶을 때
ex)
tmp = [("table", 1), ("airplane", 2), ("tree", 2), ("bag", 2), ("car", 3)]
을 각 Element의 2번째 값(1, 5, 2, 4, 3)들을 기준으로 오름차순 정렬하고 싶은 경우.방법:
tmp.sort(key=lambda x: x[1])
결과:
[('table', 1), ('airplane', 2), ('tree', 2), ('bag', 2), ('car', 3)]
2. 정렬 기준을 2개 이상 사용하고 싶을 때
ex)
tmp = [("table", 1), ("airplane", 2), ("tree", 2), ("bag", 2), ("car", 3)]
을 각 Element의 2번째 값(1, 5, 2, 4, 3)들을 기준으로 정렬한 다음 1번 째 값으로도 정렬을 하고 싶을 때.방법:
tmp.sort(key=lambda x: (x[1], x[2]))
결과:
[('table', 1), ('airplane', 2), ('bag', 2), ('tree', 2), ('car', 3)]
⇒ 1번 경우의 결과와 달리
('bag', 2)과 ('tree', 2)의
순서가 바뀐 것을 확인할 수 있다. (2번째 값인 각각의 정수들로 정렬 후 1번째 값인 문자열로 정렬을 또 한 번 수행했기 때문에)'Today_I_Learned > Python' 카테고리의 다른 글
[Ubuntu16.04][Python3] Python3 버전 복구 (0) 2023.12.01 [사용법] virtualenvwrapper (2) 2023.11.21 class method vs. static method (1) 2023.09.26 이터레이터 iterator (0) 2023.09.17 Python3 Scapy에 Read할 수 있는 Packet Header 추가하기(Scapy-2.4.3) (0) 2021.02.15