본문 바로가기
Python/Python알고리즘

key와 lambda를 이용한 정렬

by hyun-am 2020. 10. 20.

리스트를 보면 [[키,값],[이름,점수],[상품,가격],[단어(단어길이]] 이런 식으로 된 값들을 정렬하라는 문제들을 확인 할 수 있습니다.

하지만 파이썬을 이용하면 이러한 문제들은 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

 

댓글