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

Python에서 두 리스트를 병렬로 반복하는 방법

Python에서 두 리스트를 병렬로 순회하기

두 리스트의 길이가 서로 다를 수 있다면, 공통 인덱스 범위만큼 병렬로 순회하는 방법 중 하나는 min()으로 구한 최소 길이만큼 range()를 사용해 for 루프를 도는 것입니다.

>>> L1
['a', 'b', 'c', 'd']
>>> L2
[4, 5, 6]
>>> l = len(L1) if len(L1) <= len(L2) else len(L2)
>>> l
3
>>> for i in range(l):
    print (L1[i], L2[i])

a 4
b 5
c 6

더 파이썬다운 방법: zip() 함수

하지만 위 방식보다 훨씬 간결하고 가독성이 좋은 방법은 zip() 함수를 사용하는 것입니다. zip()은 여러 이터러블(iterable)에서 요소들을 하나씩 묶어 튜플 형태로 반환하는 이터레이터를 생성하므로, 인덱스 계산 없이 자연스럽게 병렬 순회가 가능합니다.

>>> for i, j in zip(L1, L2):
    print (i, j)

a 4
b 5
c 6

zip() 사용 시 주의할 점

zip()은 가장 짧은 이터러블을 기준으로 순회를 종료합니다. 따라서 위 예제에서 L1의 네 번째 요소 'd'는 처리되지 않습니다. 만약 긴 쪽 리스트까지 모두 순회해야 한다면, Python 3.10부터 제공되는 itertools.zip_longest()를 활용할 수 있습니다.

>>> from itertools import zip_longest
>>> for i, j in zip_longest(L1, L2, fillvalue=None):
    print (i, j)

a 4
b 5
c 6
d None

정리

  • 인덱스 기반 접근이 필요하다면 최소 길이만큼 range()로 for 루프를 작성합니다.
  • 일반적인 경우에는 zip() 함수를 사용하는 것이 가장 파이썬다운(Pythonic) 방법입니다.
  • 짧은 쪽에 맞추지 않고 긴 리스트까지 모두 순회하려면 itertools.zip_longest()를 사용하세요.