[파이썬] 2중 리스트 정렬하기

My_Code·2023년 8월 27일
post-thumbnail

파이썬에서 리스트를 정렬할 때 sort() 함수를 이용해서 간단하게 정렬할 수 있다.

리스트.sort(key = 함수, reverse =/거짓)

하지만 2중 리스트처럼 인자가 여러 개가 될 수 있는 경우에는 사용자가 직접 어떤 인자를 기준으로 정렬할지 결정해야 한다.
그럴 때 key 값을 설정하여 정렬의 기준을 잡아주는 것이다.


📌 정수형 인자를 기준으로 정렬하기

여기서 key 값을 설정해줄 때 lambda 함수를 이용해서 어떤 인자를 key값으로 사용할 지 설정한다. (lambda 함수에 대해서는 밑에서 간단히 설명)

arr = [[40, "Apple"], [20, "Mango"], [100, "Banana"], [50, "Orange"]]
arr.sort(key = lambda x:x[0])

print(arr)

## 실행 결과 ##
# [[20, 'Mango'], [40, 'Apple'], [50, 'Orange'], [100, 'Banana']]

📌 문자열 인자를 기준으로 정렬하기

arr = [[40, "Apple"], [20, "Mango"], [100, "Banana"], [50, "Orange"]]
arr.sort(key = lambda x:x[1])

print(arr)

## 실행 결과 ##
# [[40, 'Apple'], [100, 'Banana'], [20, 'Mango'], [50, 'Orange']]

📌 key값을 여러개 사용할 때(다중조건 정렬)

만약에 [제품명, 가격, 할인율] 으로 구성된 2중 리스트를 정렬해야 할 때 인자가 많은 만큼 고려해야할 것이 많이 필요할 수 있다.

그럴 때 튜플 형식으로
key = lambda x: (x[0] , x[2])처럼 lambda식을 세워주면 된다.

그리고 만약 내림차순을 하고 싶다면 '-'를 붙여주면 된다.
key = lambda x: (-x[0] , x[2])


📌 가격을 기준으로 오름차순 정렬하고, 같은 가격인 경우 할인율을 내림차순으로 정렬

arr = [["A", 13000, 10], ["F", 11000, 30], ["G", 9000, 5], ["C", 11000, 15]]
arr.sort(key = lambda x:(x[1], -x[2]))

print(arr)

## 실행 결과 ##
# [['G', 9000, 5], ['F', 11000, 30], ['C', 11000, 15], ['A', 13000, 10]]

실행 결과처럼 같은 가격인 경우에는 할인율을 기준으로 정렬한다.


📌 Lambda 함수란?

Lambda 함수는 이름없는 함수 또는 익명 함수라고도 부른다.
일반적인 함수처럼 함수명을 선언하여 함수를 만드는 것이 아니라
lambda식으로 대체하여 사용한다.

profile
조금씩 정리하자!!!

0개의 댓글