리스트를 보면 [[키,값],[이름,점수],[상품,가격],[단어(단어길이]] 이런 식으로 된 값들을 정렬하라는 문제들을 확인 할 수 있습니다.
하지만 파이썬을 이용하면 이러한 문제들은 key와 lambda를 이용해서 아주 쉽게 해결할 수 있습니다.
먼저 처음 예시는 간단하게 과일을 이름순으로 정렬하고 그다음 가격이 낮은 순으로 정렬하겠습니다.
먼저 과일의 값들은 아래와 같습니다.
data = [
["고구마",25000],
["바나나",123232],
["파인애플",4500],
["감자",3000],
["금귤",6000]
]
가격을 기준으로 정렬하겠습니다.
data.sort(key = lambda x:x[1])
print(data)
## 출력 값
#[['감자', 3000], ['파인애플', 4500], ['금귤', 6000], ['고구마', 25000], ['바나나', 123232]]
다음과 같이 가격 순으로 출력이 되는 것을 확인할 수 있습니다.
다음은 한글을 입력 받은 후 이름 길이만큼 정렬하고 나머지는 사전순으로 정렬하는 것을 보여드리겠습니다.
먼저 정렬할 데이터는 다음과 같습니다.
data = ["나라","가구","봄","가을","도토리","낫","혹","가을 아침","나는 밥을 먹고 있다."]
여기도 마찬가지로 key와 lambda를 이용하여 정렬을 하는데 조금 다르게 하겠습니다.
data.sort(key = lambda x:(len(x),x))
print(data)
이런식으로 len(x)를 설정해서 이름 길이를 먼저 정렬한 후 단어의 사전순으로 정렬을 하였습니다.
마찬가지로 사전형 데이터도 다음과 같이 정리할 수 있습니다.
다음과 같이 돈의 이름과 가치를 나타내는 데이터가 있습니다. 이것을 화폐에 가치가 낮은 순으로 정렬을 하겠습니다.
money = {
"백원" : 100,
"1$" : 1200,
"10$" : 12000,
"오천원" : 5000,
"만원" : 10000,
"100$" : 120000,
"오만원" : 50000
}
money = sorted(money.items(), key = lambda x : x[1])
## 출력 값
# [('백원', 100), ('1$', 1200), ('오천원', 5000), ('만원', 10000), ('10$', 12000), ('오만원', 50000), ('100$', 120000)]
sort에서 key = lambda를 이용해서 풀 수 있는 대표적인 쉬운 문제들을 다음과 같습니다.
단어정렬 : https://www.acmicpc.net/problem/1181
나이순 정렬 : https://www.acmicpc.net/problem/10814
좌표 정렬하기 2 : https://www.acmicpc.net/problem/11651
'Python > Python알고리즘' 카테고리의 다른 글
[DP] DP 간단한 문제 백준 1, 2, 3 더하기 풀기 (0) | 2021.01.19 |
---|---|
최장 증가 부분 수열(LIS)-개념 (0) | 2020.10.06 |
코테를 위한 isㅇㅇㅇ 메소드 (0) | 2020.08.10 |
Python list 연산에 따른 시간 복잡도 (1) | 2020.08.09 |
분할정복 (0) | 2020.08.06 |
댓글