Python에서 여러 개의 리스트를 동시에 순회해야 하는 경우가 자주 있습니다. 예를 들어 두 리스트의 같은 위치에 있는 요소들을 짝지어 처리하거나, 각 리스트의 값을 조합해서 계산할 때가 그렇습니다. 가장 직관적인 방법은 인덱스를 추적하는 외부 반복자를 사용하는 것이며, 이 방식은 길이가 같은 리스트를 순회할 때 유용합니다.
방법 1: range()와 len()으로 인덱스 기반 반복
리스트의 길이만큼 인덱스를 생성한 뒤, 각 리스트에 동일한 인덱스로 접근하는 방식입니다.
a = [10, 12, 14, 16, 18]
b = [10, 8, 6, 4, 2]
for i in range(len(a)):
print(a[i] + b[i])출력 결과
20 20 20 20 20
두 리스트의 길이가 같기 때문에 모든 요소가 정상적으로 더해져 출력됩니다.
방법 2: zip() 함수 사용
Python에서는 zip() 함수를 사용하면 여러 리스트를 병렬로 순회할 수 있습니다. zip()은 전달된 리스트 중 가장 짧은 리스트의 길이에 맞춰 반복을 종료합니다.
a = [10, 12, 14, 16, 18]
b = [10, 8, 6]
for A, B in zip(a, b):
print(A + B)출력 결과
20 20 20
리스트 b의 길이가 3이므로, zip()은 세 번만 반복하고 나머지 a의 요소들은 무시됩니다.
참고: 긴 리스트 기준으로 반복하기
만약 가장 긴 리스트를 기준으로 반복하고 싶다면, itertools 모듈의 zip_longest()를 사용할 수 있습니다. 짝이 없는 위치는 지정한 기본값(기본적으로 None)으로 채워집니다.
from itertools import zip_longest
a = [10, 12, 14, 16, 18]
b = [10, 8, 6]
for A, B in zip_longest(a, b, fillvalue=0):
print(A + B)출력 결과
20 20 20 16 18
정리
- range(len()): 길이가 같은 리스트를 인덱스로 제어하며 순회할 때 적합합니다.
- zip(): 코드가 간결하고 Python다운 방식이며, 가장 짧은 리스트 길이까지만 반복합니다.
- itertools.zip_longest(): 가장 긴 리스트 끝까지 반복하면서 부족한 값을 기본값으로 채웁니다.
상황에 맞는 방법을 선택하면 여러 리스트를 안전하고 효율적으로 동시에 처리할 수 있습니다.