일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ubuntu
- OS
- MongoDB
- DATABASE
- mysql
- Util
- macos
- Android
- typeorm
- React
- docker
- postman
- Network
- python
- wireshark
- sequelize
- AWS
- Crawling
- Express
- S3
- node.js
- algorithm
- OOAD
- css
- Scheduling
- HTML
- Kotlin
- TypeScript
- mongoose
- linux
- Today
- Total
Seongwon Lim
[Python] 다중 조건으로 정렬하는 방법 본문
서론
파이썬 언어로 프로그래밍을 할 때 흔히 사용하는 정렬 메소드는 sort(), sorted() 등이 존재한다. 보통은 [1,3,2,5,4] 처럼 집합 안에 단일 숫자 혹은 문자가 들어올 때의 정렬을 하는 경우가 많지만, 가끔 첫번째 요소를 기준으로 정렬을 한 뒤, 첫번째 요소가 같으면 두번째 요소를 다시 정렬하는 경우를 요구하기도 한다.
예를 들어 리스트 내 데이터가 튜플로 구성된 경우를 생각해보자.
- [(2,1), (4,2), (1,2), (1,3)]
이러한 경우, 튜플의 첫번째 요소를 기준으로 오름차순을 한 뒤, 첫번째 요소의 값이 같다면 두번째 요소를 기준으로 내림차순을 수행하는 로직을 요구할 수 있다.
그래서 이번 글에서는 해당 메소드들을 이용하여 다중 조건으로 정렬을 하는 방법을 간단하게 알아보고자 한다. 글의 예제는 sort() 함수를 이용하여 진행하며 sorted() 함수는 sort() 함수와 사용법이 동일하기 때문에 예제는 생략하기로 했다.
sort() 함수를 이용한 정렬 예제
먼저 sort() 함수의 기본 사용법은 다음과 같다.
num = [1,4,3,2,6,5,7]
num.sort()
print(num) # [1, 2, 3, 4, 5, 6, 7]
단일 조건을 추가하여 정렬을 하는 경우는 코드를 다음과 같이 작성할 수 있다.
num = [1,4,3,2,6,5,7]
num.sort(reverse=True)
print(num) # [7, 6, 5, 4, 3, 2, 1]
이번에는 단일 정수가 아닌 리스트 내에 튜플이 있는 경우를 생각해보자.
num = [(2,1), (4,2), (1,3), (1,2)]
num.sort()
print(num) # [(1, 2), (1, 3), (2, 1), (4, 2)]
결과를 보면 첫번째 요소를 기준으로 오름차순을 하고, 두번째 요소를 기준으로 한번 더 오름차순 정렬을 수행한 것을 확인할 수 있다.
만약, 두번째 요소를 기준으로 오름차순을 먼저 수행하고 싶은 경우에는 람다(lambda)를 이용하여 구성할 수 있다.
num = [(2,1), (4,2), (1,3), (1,2)]
num.sort(key= lambda x:x[1])
print(num) # [(2, 1), (4, 2), (1, 2), (1, 3)]
x: x[1]의 의미는 리스트 내 각 요소의 1번째 인자(인덱스는 0부터 시작)를 기준으로 정렬을 하라는 의미이다.
다시 말하면, 그냥 sort()를 수행하는 것은 sort(key= lambda x:x[0])를 수행하는 것과 동일하다.
다중 조건으로 정렬하기
그러면 위에서 언급한 것과 같이 첫번째 요소를 기준으로는 오름차순, 두번째 요소를 기준으로는 내림차순 정렬을 하려면 어떻게 해야할까?
num = [(2,1), (2,3), (4,2), (1,3), (1,2)]
num.sort(key= lambda x: (x[0], -x[1]))
print(num) # [(1, 3), (1, 2), (2, 3), (2, 1), (4, 2)]
이렇게 x: 뒤에 튜플 형식으로 순서를 정의하여 정렬을 할 수 있다. (x[0], -x[1])의 의미는 다음과 같다.
- x[0]가 순서상으로 먼저 나왔으므로 0번째 인자를 기준으로 오름차순을 한다.
- 다음으로 x[1]이 나왔으므로 1번째 인자를 기준으로 정렬을 하는데 - 부호가 붙었으므로 내림차순으로 정렬을 한다.
- 람다 식에서 마이너스 부호(-)가 붙으면 현재 정렬 방식의 반대 방식으로 정렬을 수행하라는 의미가 된다.
출처
'Python' 카테고리의 다른 글
[Python] deque를 이용하여 리스트 회전하기 (0) | 2022.11.02 |
---|---|
[Python] upper(), lower(), capitalize(), title() 함수 사용법 (0) | 2022.09.20 |
[Python] map() 함수를 통해 리스트 데이터 타입 변환하기 (0) | 2022.07.14 |
[Python] enumerate() 함수 사용 방법 (0) | 2022.07.13 |
[Python] 숫자, 문자열 거꾸로 출력하기 (0) | 2022.07.12 |