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

Python 튜플 리스트에서 최댓값을 가진 첫 번째 요소 추출하기

튜플로 이루어진 리스트가 있을 때, 그중 최댓값을 가진 튜플을 찾아야 하는 경우가 자주 있습니다. 특히 여러 개의 튜플이 동일한 최댓값을 가질 경우에는 가장 먼저 등장하는 튜플을 선택해야 합니다. 이 글에서는 Python으로 이 문제를 해결하는 세 가지 방법을 예제 코드와 함께 살펴보겠습니다.

1. itemgetter와 max() 활용하기

operator 모듈의 itemgetter(1)를 사용하면 각 튜플의 인덱스 1 위치에 있는 값들을 기준으로 비교할 수 있습니다. 여기에 max() 함수를 적용하면 최댓값을 가진 항목을 얻을 수 있으며, 결과에 인덱스 0을 적용해 최댓값을 가진 첫 번째 튜플의 요소를 추출합니다.

예제 코드

from operator import itemgetter
# 리스트 초기화
listA = [('Mon', 3), ('Tue', 20), ('Wed', 9)]
# 주어진 리스트 출력
print("Given list : \n" ,listA)
# max()와 itemgetter() 사용
res = max(listA, key=itemgetter(1))[0]
# 결과 출력
print("Day with maximum score is : \n",res)

실행 결과

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

Given list :
[('Mon', 3), ('Tue', 20), ('Wed', 9)]
Day with maximum score is :
Tue

2. max()와 람다(lambda) 함수 활용하기

람다 함수를 사용해 각 튜플의 인덱스 1 위치 요소를 기준으로 삼고, max() 함수를 적용할 수도 있습니다. 마찬가지로 결과에 인덱스 0을 적용하면 여러 개의 일치 항목 중 첫 번째 값을 최종 결과로 얻게 됩니다.

예제 코드

# 리스트 초기화
listA = [('Mon', 3), ('Tue', 20), ('Wed', 9)]
# 주어진 리스트 출력
print("Given list : \n" ,listA)
# max()와 람다 함수 사용
res = max(listA, key = lambda i : i[1])[0]
# 결과 출력
print("Day with maximum score is : \n",res)

실행 결과

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

Given list :
[('Mon', 3), ('Tue', 20), ('Wed', 9)]
Day with maximum score is :
Tue

3. sorted() 함수 활용하기

이 방법에서는 sorted() 함수에 람다 함수를 키로 지정하고, reverse=True 옵션을 설정해 내림차순으로 정렬합니다. 정렬된 리스트의 첫 번째 항목이 곧 최댓값을 가진 튜플이므로, 인덱스 [0][0]을 통해 원하는 요소를 추출합니다.

예제 코드

# 리스트 초기화
listA = [('Mon', 3), ('Tue', 20), ('Wed', 9)]
# 주어진 리스트 출력
print("Given list : \n" ,listA)
# sorted()와 람다 함수 사용
res = sorted(listA, key = lambda i: i[1], reverse = True)[0][0]
# 결과 출력
print("Day with maximum score is : \n",res)

실행 결과

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

Given list :
[('Mon', 3), ('Tue', 20), ('Wed', 9)]
Day with maximum score is :
Tue

마무리

세 가지 방법 모두 동일한 결과를 반환하지만, 상황에 따라 적합한 방법이 다릅니다. itemgetter는 성능이 좋고 코드가 간결하며, 람다 함수는 별도의 임포트 없이 유연하게 조건을 지정할 수 있습니다. 반면 sorted()는 전체 리스트를 정렬하므로 O(n log n)의 시간이 걸려, 단순히 최댓값만 필요한 경우에는 max()를 사용하는 것이 더 효율적입니다.