Python에서 두 개의 리스트를 곱하는 연산은 데이터 분석 계산 과정에서 자주 필요합니다. 이 글에서는 '리스트의 리스트', 즉 중첩 리스트(nested list)의 각 요소를 다른 리스트의 대응 요소와 곱하는 방법을 소개합니다.
반복문(loop) 활용하기
이 방식은 두 개의 for 반복문을 중첩하여 사용합니다. 바깥쪽 반복문은 리스트에 포함된 하위 리스트의 개수를 추적하고, 안쪽 반복문은 각 하위 리스트 내부의 요소를 하나씩 처리합니다. * 연산자를 사용해 곱수(multiplier) 리스트의 요소와 중첩 리스트의 대응 요소를 곱한 뒤 결과를 새로운 리스트에 저장합니다.
예제 코드
listA = [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
multipliers = [5, 11, 0]
# 원본 리스트 출력
print("주어진 리스트: ", listA)
# 곱수 리스트 출력
print("곱수 리스트 : ", multipliers)
# 반복문을 사용한 곱셈
res = []
for i in range(len(listA)):
temp = []
for j in range(len(multipliers)):
temp.append(multipliers[i] * listA[i][j])
res.append(temp)
# 결과 출력
print("곱셈 결과 : ", res)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
주어진 리스트: [[2, 11, 5], [3, 2, 8], [11, 9, 8]] 곱수 리스트 : [5, 11, 0] 곱셈 결과 : [[10, 55, 25], [33, 22, 88], [0, 0, 0]]
enumerate 활용하기
enumerate 메서드를 사용하면 중첩 리스트의 각 하위 리스트를 인덱스와 함께 가져올 수 있습니다. 여기에 리스트 컴프리헨션(list comprehension)을 조합하면 반복문보다 더 간결하고 가독성 높은 코드로 동일한 곱셈 연산을 수행할 수 있습니다.
예제 코드
listA = [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
multipliers = [5, 11, 0]
# 원본 리스트 출력
print("주어진 리스트: " + str(listA))
# 곱수 리스트 출력
print("곱수 리스트 : ", multipliers)
# enumerate를 사용한 곱셈
res = [[multipliers[i] * j for j in x]
for i, x in enumerate(listA)]
# 결과 출력
print("곱셈 결과 : ", res)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
주어진 리스트: [[2, 11, 5], [3, 2, 8], [11, 9, 8]] 곱수 리스트 : [5, 11, 0] 곱셈 결과 : [[10, 55, 25], [33, 22, 88], [0, 0, 0]]
두 방법 모두 동일한 결과를 반환하지만, enumerate와 리스트 컴프리헨션을 활용하는 방식이 코드가 짧고 Python다운 표현이라는 장점이 있습니다. 반면 반복문 방식은 로직을 단계별로 명확하게 보여주기 때문에 초보자가 이해하기에 유리합니다. 상황에 맞는 방법을 선택해 사용하시기 바랍니다.