Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 주어진 속성 인덱스를 기준으로 테이블(2차원 리스트) 정렬하는 방법

문제 개요

선수들의 정보를 담고 있는 2차원 리스트가 있다고 가정해 보겠습니다. 각 행은 한 명의 선수에 대한 정보를 나타내며, 순위(Rank), 나이(Age), 키(Height) 세 가지 속성으로 구성되어 있습니다. 여기에 추가로 숫자 k가 주어졌을 때, k번째 속성을 기준으로 전체 데이터를 정렬해야 합니다.

예를 들어 입력이 다음과 같다고 해보겠습니다.

순위나이
125190
235180
333185
426175
535180

이때 k = 1, 즉 두 번째 속성인 '나이'를 기준으로 오름차순 정렬하면 결과는 다음과 같습니다.

순위나이
125190
426175
333185
235180
535180
[[1, 25, 190], [4, 26, 175], [3, 33, 185], [2, 35, 180], [5, 35, 180]]

나이가 같은 경우(예: 35세인 2번과 5번 선수)에는 원래 리스트의 순서가 유지되는데, 이는 파이썬의 정렬이 안정 정렬(stable sort)이기 때문입니다.

해결 접근 방법

이 문제는 다음 두 단계만으로 간단히 해결할 수 있습니다.

  • info라는 이름의 2차원 리스트에 리스트의 내장 메서드인 sort() 함수를 호출합니다.

  • k번째 요소를 반환하는 람다(lambda) 함수를 정의하고, 이를 sort() 함수의 key 매개변수에 전달합니다.

파이썬의 sort() 메서드는 key 인자로 전달된 함수의 반환값을 기준으로 요소를 비교합니다. 따라서 lambda x: x[k]처럼 각 행(row)에서 k번째 열(column)의 값을 꺼내도록 지정하면, 해당 속성을 기준으로 정렬이 수행됩니다.

구현 예제

아래 코드를 통해 실제 동작을 확인해 보겠습니다.

def solve(info, k):
    info.sort(key=lambda x: x[k])
    return info

info = [[1, 25, 190], [2, 35, 180], [3, 33, 185], [4, 26, 175], [5, 35, 180]]
k = 1
print(solve(info, k))

입력

[[1, 25, 190], [2, 35, 180], [3, 33, 185], [4, 26, 175], [5, 35, 180]], 1

출력

[[1, 25, 190], [4, 26, 175], [3, 33, 185], [2, 35, 180], [5, 35, 180]]

추가 팁

  • 내림차순 정렬이 필요하다면 info.sort(key=lambda x: x[k], reverse=True)처럼 reverse=True 옵션을 사용하면 됩니다.

  • 원본 리스트를 유지한 채 새롭게 정렬된 리스트를 얻고 싶다면 sorted(info, key=lambda x: x[k]) 함수를 사용하는 것이 좋습니다.

  • 여러 조건으로 정렬해야 하는 경우에는 key=lambda x: (x[1], x[2]) 형태로 튜플을 반환하면 첫 번째 기준이 같을 때 두 번째 기준으로 정렬됩니다.