-목차-
1. 일반적인 정렬
2. 다중조건이 걸린 정렬
3. 예제
- 일반적인 정렬
파이썬에서 일반적인 정렬, 즉 소팅과정은 sorted() 혹은 .sort()를 사용한다.
(1) sorted() 함수 이용
num_lst = [4,5,1,6,2,3,]
num_lst_sorted = sorted(num_lst)
print(num_lst_sorted)
>>>
[1,2,3,4,5,6]
>>>
(2) .sort() 함수 이용
num_lst = [4,5,1,6,2,3,]
num_lst.sort()
print(num_lst)
>>>
[1,2,3,4,5,6]
>>>
- 다중조건이 걸린 정렬 (주로 다중리스트의 경우)
(1) 리스트 안의 항목이 모두 오름차순
num_lst = [[1,2],[1,1],[2,3],[0,4],[2,6],[3,0]]
num_lst_sorted = sorted(num_lst)
print(num_lst_sorted)
>>>
[[0, 4], [1, 1], [1, 2], [2, 3], [2, 6], [3, 0]]
>>>
sorted() 함수 사용시 이차원 리스트 안의 요소 모두가 오름차순으로 정리된다.
(2) 리스트 안의 항목 중 특정 부분만 오름차순 혹은 내림차순
num_lst = [[1,2],[1,1],[2,3],[0,4],[2,6],[3,0]]
num_lst_sorted = sorted(num_lst, key = lambda x : x[0])
print(num_lst_sorted)
>>>
[[0, 4], [1, 2], [1, 1], [2, 3], [2, 6], [3, 0]]
>>>
새로운 리스트 = sorted(정렬해줄 리스트, key = lambda x : 조건) 을 통해 정렬해준다.
(위의 코드 블럭과 같이 항목들의 첫번째 요소만 오름차순으로 정렬할 수 있다. 물론 두번째 요소는 첫번째 요소가 같다면 입력된 순서를 따른다.)
num_lst = [[1,2],[1,1],[2,3],[0,4],[2,6],[3,0]]
num_lst_sorted = sorted(num_lst, key = lambda x : -x[0])
print(num_lst_sorted)
>>>
[[3, 0], [2, 3], [2, 6], [1, 2], [1, 1], [0, 4]]
>>>
조건에 -를 붙이면 내림차순으로 정리가능하다.
(3) 리스트 안의 항목 중 특정 부분은 오름차순, 다른 부분은 내림차순
num_lst = [[1,2],[1,1],[2,3],[0,4],[2,6],[3,0]]
num_lst_sorted = sorted(num_lst, key = lambda x : (x[0],-x[1]))
print(num_lst_sorted)
>>>
[[0, 4], [1, 2], [1, 1], [2, 6], [2, 3], [3, 0]]
>>>
위의 코드블럭과 같이 조건에 ()를 씌워서 첫번째 요소는 오름차순으로, 두번째 요소는 내림차순으로 정리할 수도 있다.
- 예제 1 [백준] 10814 나이순 정렬
https://www.acmicpc.net/problem/10814
① 문제 조건에 의해 나이 입력되는 회원들을 나이순으로 정렬해야한다.(단, 나이가 같다면 가입순)
② 리스트 안의 특정 요소만 오름차순을 하는 경우다...!!!
이를 코드로 구현하면 다음과 같다.
# 10814 나이순 정렬
import sys
input = sys.stdin.readline
n = int(input())
people = [0]*n
for i in range(n) :
age, name = map(str,input().split())
age = int(age)
people[i] = [age,name]
people_sorted = sorted(people, key = lambda x : x[0])
for i in range(n) :
print(people_sorted[i][0],people_sorted[i][1])
- 예제 2 [백준] 10825 국영수
https://www.acmicpc.net/problem/10825
① 다음과 같은 문제 조건을 만족시켜야 한다.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
② 리스트 안의 항목 중 특정 부분은 오름차순, 특정 부분은 내림차순으로 정렬하는 경우이다....!!!
이를 코드로 구현하면 다음과 같다.
# 10825 국영수
import sys
input = sys.stdin.readline
n = int(input())
people = [0]*n
for i in range(n) :
name, kr, eng, math = map(str,input().split())
kr = int(kr)
eng = int(eng)
math = int(math)
people[i] = [kr,eng,math,name]
people_sorted = sorted(people, key = lambda x : (-x[0],x[1],-x[2],x[3]))
for i in range(n) :
print(people_sorted[i][3])
'CS > 파이썬' 카테고리의 다른 글
파이썬(Python) 배열 안의 원소의 곱을 구하는 방법 (0) | 2021.08.13 |
---|---|
파이썬(Python) 딕셔너리(dictionary) 관련 함수,메소드 정리 (0) | 2021.08.09 |
파이썬(Python) 시간 초과 해결방법 (1) | 2021.07.19 |
파이썬(Python) 리스트 합집합, 교집합, 차집합, 대칭차 (0) | 2021.07.10 |
파이썬(Python) 소수점 자리 제한하는 방법 (4) | 2021.07.10 |