Python 프로그래밍에서는 리스트 안에 여러 개의 하위 리스트(sublist)가 포함된 중첩 리스트 구조를 다루는 경우가 많습니다. 이럴 때 각 하위 리스트에서 최댓값을 추출해야 하는 상황이 자주 발생합니다. 이 글에서는 이를 해결하는 대표적인 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.
방법 1: max 함수와 리스트 컴프리헨션 활용
가장 직관적인 방법은 for 반복문과 in 조건을 사용해 각 하위 리스트를 순회하면서 max() 함수를 적용하는 것입니다. 리스트 컴프리헨션(list comprehension)을 사용하면 한 줄로 간결하게 작성할 수 있습니다.
예제 코드
Alist = [[10, 13, 454, 66, 44], [10, 8, 7, 23]]
# 주어진 리스트
print("주어진 리스트:\n ", Alist)
# max 함수 적용
res = [max(elem) for elem in Alist]
# 결과 출력
print("각 하위 리스트의 최댓값:\n ", res)실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
주어진 리스트: [[10, 13, 454, 66, 44], [10, 8, 7, 23]] 각 하위 리스트의 최댓값: [454, 23]
첫 번째 하위 리스트 [10, 13, 454, 66, 44]에서는 454가, 두 번째 하위 리스트 [10, 8, 7, 23]에서는 23이 최댓값으로 반환된 것을 확인할 수 있습니다.
방법 2: map 함수와 max 조합
두 번째 방법은 map() 함수를 사용하는 것입니다. map(max, Alist)처럼 작성하면 하위 리스트를 순회하면서 각 요소에 max 함수가 자동으로 적용됩니다. 이후 list()로 감싸서 결과를 리스트 형태로 변환합니다.
예제 코드
Alist = [[10, 13, 454, 66, 44], [10, 8, 7, 23]]
# 주어진 리스트
print("주어진 리스트:\n ", Alist)
# map과 max 적용
res = list(map(max, Alist))
# 결과 출력
print("각 하위 리스트의 최댓값:\n ", res)실행 결과
역시 동일한 결과가 출력됩니다.
주어진 리스트: [[10, 13, 454, 66, 44], [10, 8, 7, 23]] 각 하위 리스트의 최댓값: [454, 23]
정리
두 방법 모두 동일한 결과를 반환하지만, 상황에 따라 선택 기준이 달라질 수 있습니다.
- 리스트 컴프리헨션: 가독성이 뛰어나고 Python다운 문법으로, 추가 로직(조건 필터링 등)을 넣기에 유연합니다.
- map + max: 코드가 더 짧고, 대량의 데이터를 처리할 때 내부적으로 C 수준으로 최적화되어 약간 더 빠를 수 있습니다.
일반적으로는 코드 의도를 명확하게 드러내는 리스트 컴프리헨션이 널리 권장되며, 성능이 중요한 대규모 데이터 처리에는 map 방식도 좋은 선택지가 됩니다.