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

Python 중첩 리스트에서 최대값을 가진 하위 리스트 찾는 방법

파이썬에서 리스트는 다른 리스트를 요소로 가질 수 있습니다. 이렇게 구성된 중첩 리스트(nested list) 안에서 최대값을 가진 하위 리스트를 찾아야 하는 경우가 종종 발생하는데요. 이 글에서는 max() 함수를 활용해 이 문제를 해결하는 두 가지 방법을 예제 코드와 함께 소개합니다.

1. max()와 lambda 함수 함께 사용하기

max() 함수의 key 인자에 lambda 표현식을 전달하면, 각 하위 리스트의 특정 요소를 기준으로 비교하여 최대값을 가진 하위 리스트를 손쉽게 구할 수 있습니다. 아래 예제에서는 각 하위 리스트의 두 번째 요소(인덱스 1)를 기준으로 비교합니다.

예제 코드

listA = [['Mon', 90], ['Tue', 32], ['Wed', 120]]
# lambda를 사용한 max
res = max(listA, key=lambda x: x[1])
# 결과 출력
print("주어진 리스트:\n", listA)
print("최대값을 가진 리스트:\n", res)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

주어진 리스트:
[['Mon', 90], ['Tue', 32], ['Wed', 120]]
최대값을 가진 리스트:
['Wed', 120]

세 개의 하위 리스트 중 두 번째 값이 가장 큰 ['Wed', 120]이 정상적으로 반환된 것을 확인할 수 있습니다.

2. operator.itemgetter() 활용하기

operator 모듈의 itemgetter() 함수를 사용하면 lambda 없이도 동일한 작업을 수행할 수 있습니다. 인덱스 위치 1의 값을 추출 기준으로 지정한 뒤 max() 함수를 적용하면, 최대값을 가진 하위 리스트를 얻을 수 있습니다.

예제 코드

import operator

listA = [['Mon', 90], ['Tue', 32], ['Wed', 120]]
# itemgetter 사용
res = max(listA, key=operator.itemgetter(1))
# 결과 출력
print("주어진 리스트:\n", listA)
print("최대값을 가진 리스트:\n", res)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

주어진 리스트:
[['Mon', 90], ['Tue', 32], ['Wed', 120]]
최대값을 가진 리스트:
['Wed', 120]

두 방법의 차이점과 선택 기준

두 방법 모두 동일한 결과를 반환하지만, 상황에 따라 적합한 방법이 다릅니다.

  • lambda 방식: 별도의 모듈 import가 필요 없으며, 여러 조건을 조합하거나 계산식을 적용하는 등 복잡한 비교 기준도 자유롭게 표현할 수 있어 유연성이 뛰어납니다.
  • itemgetter 방식: C로 구현되어 있어 대용량 데이터 처리 시 성능이 더 좋고, 단순히 특정 인덱스 값을 기준으로 삼을 때 코드가 더 간결하고 가독성이 좋습니다.

참고로 두 방식 모두 리스트를 한 번만 순회하면 되므로 시간 복잡도는 O(n)으로 매우 효율적입니다. 따라서 단순 인덱스 비교라면 itemgetter(), 복잡한 조건이 필요하다면 lambda를 선택하는 것이 좋습니다.