파이썬에서는 데이터 조작 작업 과정에서 두 리스트의 요소들을 서로 나눗셈 연산에 활용해야 하는 경우가 자주 있습니다. 이 글에서는 두 리스트를 요소별로 나누는 대표적인 방법 두 가지를 예제 코드와 함께 살펴보겠습니다.
방법 1: zip 함수 활용하기
zip 함수는 주어진 두 리스트의 요소들을 인덱스 기준으로 하나씩 짝지어 줍니다. 이렇게 만들어진 각 요소 쌍에 나눗셈 연산자(/)를 적용한 뒤, 그 결과를 새로운 리스트에 저장하는 방식입니다. 리스트 컴프리헨션(list comprehension)과 함께 사용하면 코드를 매우 간결하게 작성할 수 있습니다.
예제
# 주어진 리스트
list1 = [12, 4, 0, 24]
list2 = [6, 3, 8, -3]
# 주어진 리스트 출력
print("Given list 1 : " + str(list1))
print("Given list 2 : " + str(list2))
# zip 함수로 요소별 나눗셈 수행
res = [i / j for i, j in zip(list1, list2)]
print(res)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list 1 : [12, 4, 0, 24] Given list 2 : [6, 3, 8, -3] [2.0, 1.3333333333333333, 0.0, -8.0]
방법 2: truediv와 map 함수 활용하기
truediv 연산자는 파이썬 표준 라이브러리인 operator 모듈에 포함되어 있으며, 두 숫자 사이의 참 나눗셈(true division)을 수행합니다. 여기에 map 함수를 함께 사용하면 두 리스트의 각 요소 쌍에 대해 나눗셈 연산을 반복적으로 적용할 수 있습니다.
예제
from operator import truediv
# 주어진 리스트
list1 = [12, 4, 0, 24]
list2 = [6, 3, 8, -3]
# 주어진 리스트 출력
print("Given list 1 : " + str(list1))
print("Given list 2 : " + str(list2))
# map과 truediv로 요소별 나눗셈 수행
res = list(map(truediv, list1, list2))
print(res)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list 1 : [12, 4, 0, 24] Given list 2 : [6, 3, 8, -3] [2.0, 1.3333333333333333, 0.0, -8.0]
참고: 0으로 나누기 오류 처리
두 방법 모두 나누는 값(분모)이 0이면 ZeroDivisionError가 발생할 수 있습니다. 실무에서는 이를 안전하게 처리하기 위해 조건문이나 예외 처리를 추가하는 것이 좋습니다.
res = [i / j if j != 0 else None for i, j in zip(list1, list2)]
이처럼 분모가 0인 경우 None 등의 값을 반환하도록 처리하면 프로그램이 중단되지 않고 안정적으로 동작합니다.