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

Python에서 인덱스를 기준으로 단일 리스트와 중첩 리스트의 요소 더하기

Python에서는 리스트를 중첩할 수 있습니다. 즉, 하나의 큰 리스트 안에 여러 개의 작은 리스트가 요소로 포함되는 구조를 만들 수 있습니다. 이번 글에서는 단일 리스트(simple list)의 각 요소를 중첩 리스트(nested list)의 해당 위치 요소들에 더하는 방법을 알아보겠습니다.

두 리스트의 길이가 서로 다른 경우에는 결과 리스트의 길이가 더 짧은 쪽 리스트의 길이를 따라간다는 점을 기억해 두세요. 아래에서 세 가지 대표적인 방법을 소개합니다.

1. for 루프 사용하기

가장 기본적인 방법은 for 루프를 활용하는 것입니다. 바깥쪽 루프로 단일 리스트의 인덱스를 순회하고, 안쪽 루프에서 중첩 리스트의 각 하위 리스트 요소에 단일 리스트의 값을 더한 뒤 append() 함수로 결과 리스트에 추가합니다.

예제

simple_list = [25, 35, 45, 55, 65]
nested_list = [[5,10], [10], [5,15], [25], [5,10,15],[5,6]]
result_list = []

for n in range(len(simple_list)):
    var = []
    for m in nested_list[n]:
        var.append(m + simple_list[n])
    result_list.append(var)
print("The first list :", simple_list)
print("The nested list :", nested_list)
print("Result :",result_list)

출력 결과

The first list : [25, 35, 45, 55, 65]
The nested list : [[5, 10], [10], [5, 15], [25], [5, 10, 15], [5, 6]]
Result : [[30, 35], [45], [50, 60], [80], [70, 75, 80]]

위 코드에서 simple_list의 길이가 5이므로, nested_list에 6번째 하위 리스트인 [5, 6]이 있더라도 결과에는 반영되지 않습니다. 이것이 앞서 언급한 '짧은 리스트의 길이가 결과의 최대 길이가 된다'는 규칙입니다.

2. enumerate() 함수 사용하기

enumerate() 함수는 리스트나 튜플 같은 컬렉션을 받아 인덱스와 값을 함께 반환하는 열거형(enumerate) 객체를 만듭니다. 이 방식에서는 enumerate()로 중첩 리스트의 인덱스와 하위 리스트를 동시에 얻은 뒤, 리스트 컴프리헨션(list comprehension)을 이용해 단일 리스트의 같은 인덱스 값과 더합니다. 코드가 훨씬 간결해지는 장점이 있습니다.

예제

simple_list = [25, 35, 45, 55, 65, 25]
nested_list = [[5,10], [10], [5,15], [25], [5,10,15]]
result_list = []

# enumerate 활용
result_list = [[val + simple_list[p] for val in q] for p, q in enumerate(nested_list)]
print("The first list :", simple_list)
print("The nested list :", nested_list)
print("Result :",result_list)

출력 결과

The first list : [25, 35, 45, 55, 65, 25]
The nested list : [[5, 10], [10], [5, 15], [25], [5, 10, 15]]
Result : [[30, 35], [45], [50, 60], [80], [70, 75, 80]]

3. zip() 함수 사용하기

zip() 함수는 두 개 이상의 iterable을 받아 각 요소를 묶어주는 역할을 합니다. 이 방법은 enumerate()를 사용한 예제와 로직은 동일하지만, zip()으로 두 리스트를 직접 묶어 처리한다는 점이 다릅니다. 인덱스를 명시적으로 다루지 않아도 되기 때문에 가독성이 좋습니다.

예제

simple_list = [25, 35, 45, 55, 65, 25]
nested_list = [[5,10], [10], [5,15], [25], [5,10,15]]
result_list = []

result_list = [[w + u for w in v] for u, v in zip(simple_list, nested_list)]

print("The first list :", simple_list)
print("The nested list :", nested_list)
print("Result :",result_list)

출력 결과

The first list : [25, 35, 45, 55, 65, 25]
The nested list : [[5, 10], [10], [5, 15], [25], [5, 10, 15]]
Result : [[30, 35], [45], [50, 60], [80], [70, 75, 80]]

정리

세 가지 방법 모두 동일한 결과를 만들어냅니다. 초보자라면 for 루프 방식으로 동작 원리를 익히고, 실무에서는 enumerate()나 zip()과 리스트 컴프리헨션을 조합해 더 간결하고 Python다운(Pythonic) 코드를 작성하는 것을 추천합니다. 특히 zip()은 두 리스트를 병렬로 순회할 때 가장 직관적이며, enumerate()는 인덱스 정보가 추가로 필요할 때 유용합니다.