프로그래밍언어/파이썬

[Python] 다중 리스트(List) 정렬 방법 - 인덱스 우선순위

shoney9254 2021. 8. 31. 22:34
반응형

다중 리스트 또는 튜플을 사용하게 되면, 정렬에 대해서 고민이 생긴다. 

다중 리스트 정렬 방식 중에서 가장 쉽고 다양하게 응용할 수 있는 lamda 식을 정리 했다.

아 그리고 설명하기 앞서서, sort와 sorted의 차이는 기존 리스트에서 변경하는 것과 신규로 리스트를 반환하는 것의 차이다. 아래 예제들은 sort를 이용했다. sorted에서의 key 값에 아래 내용을 넣어도 같은 결과를 얻을 수 있다. 

 

0. 다중 리스트 선언

먼저, 다중리스트 하나를 만들어보자. 

 

소스 코드

items = [['item1', '10', 15], ['item6', '11', 15], ['item3', '3', 4], ['item2', '17', 8], ['item4', '16', 8], ['item5', '18', 8]]

print(items)

결과

[['item1', '10', 15], ['item6', '11', 15], ['item3', '3', 4], ['item2', '17', 8], ['item4', '16', 8], ['item5', '18', 8]]

 

 

1. 인덱스 0을 기준으로 정렬하기 - str 형식 정렬

인덱스 0은 string으로 정렬하기 위해서는, lambda x : x[0]을 key에 입력한다. 

이 의미는 0번째 인덱스를 기준으로 정렬하겠다는 의미다. 

내림차순으로 변경하려면, reverse = True 를 입력해주면 된다. 

소스 코드

items.sort(key=lambda x: x[0])

print("인덱스 0기준 오름차순 : ", items)

items.sort(key=lambda x: x[0], reverse=True)

print("인덱스 0기준 내림차순 : ", items)

결과

인덱스0 오름: [['item1', '10', 15], ['item2', '17', 8], ['item3', '3', 4], ['item4', '16', 8], ['item5', '18', 8], ['item6', '11', 15]]
인덱스0 내림: [['item6', '11', 15], ['item5', '18', 8], ['item4', '16', 8], ['item3', '3', 4], ['item2', '17', 8], ['item1', '10', 15]]

 

2. 인덱스 1을 기준으로 정렬하기 - str 형식의 숫자

str형식의 숫자이기 때문에 int 함수를 통해 int 값으로 변환하여 비교해야한다.

int 형식은 -를 붙여서 차순을 변경 할 수 있다. 

소스 코드

items.sort(key=lambda x: int(x[1]))

print("인덱스1 오름:", items)

items.sort(key=lambda x: -int(x[1]))

print("인덱스1 내림:", items)

결과

인덱스1 오름: [['item3', '3', 4], ['item1', '10', 15], ['item6', '11', 15], ['item4', '16', 8], ['item2', '17', 8], ['item5', '18', 8]]
인덱스1 내림: [['item5', '18', 8], ['item2', '17', 8], ['item4', '16', 8], ['item6', '11', 15], ['item1', '10', 15], ['item3', '3', 4]]

 

3. 인덱스 2을 기준으로 정렬하기 - int 형식 숫자

소스 코드

# 인덱스 2를 기준으로 정렬

items.sort(key=lambda x: x[2])

print("인덱스2 오름:", items)

items.sort(key=lambda x: -x[2])

print("인덱스2 내림:", items)

 

결과

인덱스2 오름: [['item3', '3', 4], ['item5', '18', 8], ['item2', '17', 8], ['item4', '16', 8], ['item6', '11', 15], ['item1', '10', 15]]
인덱스2 내림: [['item6', '11', 15], ['item1', '10', 15], ['item5', '18', 8], ['item2', '17', 8], ['item4', '16', 8], ['item3', '3', 4]]

 

4. 2가지 조건을 우선순위에 맞게 정렬하기

괄호를 이용해서 정렬 조건을 우선순위에 맞게 작성할 수 있다. 

우선순위가 높은 순으로 작성하면된다. 

소스 코드

items.sort(key=lambda x: (x[2], int(x[1])))

print("인덱스2,1 오름:", items)

결과

인덱스2,1 오름: [['item3', '3', 4], ['item4', '16', 8], ['item2', '17', 8], ['item5', '18', 8], ['item1', '10', 15], ['item6', '11', 15]]

 

반응형