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

파이썬 중첩 리스트에서 가장 긴 하위 리스트와 그 길이 찾는 방법

파이썬으로 데이터 분석을 하다 보면 중첩 리스트(nested list)를 자주 다루게 됩니다. 이번 글에서는 중첩 리스트를 구성하는 여러 하위 리스트 중 가장 길이가 긴 리스트를 찾고, 해당 리스트와 그 길이를 함께 출력하는 방법을 세 가지로 정리해 소개합니다.

1. lambda와 map 활용하기

중첩 리스트를 선언한 뒤, 람다(lambda) 함수에 각 요소의 길이를 기준으로 삼도록 지정하고 max 함수에 전달하는 방식입니다. 이렇게 하면 최대 길이를 가진 리스트와 그 길이를 한 번에 구할 수 있습니다.

예제 코드

def longest(lst):
    longestList = max(lst, key=lambda i: len(i))
    maxLength = max(map(len, lst))
    return longestList, maxLength

# 실행 코드
listA = [[1, 2], [2, 45, 6, 7], [11, 65, 2]]
print("Longest List and its length:\n", longest(listA))

실행 결과

Longest List and its length:
([2, 45, 6, 7], 4)

2. len과 max 조합하기

이 방식은 먼저 제너레이터 표현식과 max, len 함수를 이용해 하위 리스트 중 최대 길이를 구한 후, 전체 리스트를 순회하면서 그 길이와 일치하는 하위 리스트를 찾아내는 방법입니다. 코드 흐름이 직관적이라 초보자에게도 이해하기 쉽습니다.

예제 코드

def longest(lst):
    longestList = []
    maxLength = max(len(x) for x in lst)
    for i in lst:
        if len(i) == maxLength:
            longestList = i
    return longestList, maxLength

# 실행 코드
listA = [[1, 2], [2, 45, 6, 7], [11, 6, 2]]
print("Longest List and its length:\n", longest(listA))

실행 결과

Longest List and its length:
([2, 45, 6, 7], 4)

3. map 함수만 활용하기

두 번째 방법과 로직은 거의 같지만, 최대 길이를 계산할 때 제너레이터 대신 map(len, lst)를 사용한다는 점이 다릅니다. map은 각 하위 리스트에 len을 일괄 적용해 주므로 코드가 더 간결해집니다.

예제 코드

def longest(lst):
    longestList = []
    maxLength = max(map(len, lst))
    for i in lst:
        if len(i) == maxLength:
            longestList = i
    return longestList, maxLength

# 실행 코드
listA = [[1, 2], [2, 45, 6, 7], [11, 6, 2]]
print("Longest List and its length:\n", longest(listA))

실행 결과

Longest List and its length:
([2, 45, 6, 7], 4)

마무리

세 가지 방법 모두 동일한 결과를 반환하지만 상황에 따라 장단점이 있습니다. 한 줄로 간결하게 처리하고 싶다면 lambda + max 방식이 적합하고, 코드의 가독성과 디버깅 편의를 우선한다면 len과 반복문을 사용하는 방식이 좋습니다. 또한 최대 길이를 가진 하위 리스트가 여러 개일 경우, 위 예제들은 마지막으로 발견된 리스트를 반환한다는 점도 참고하세요.