[18] Use zip to Process Iterators in Parallel

2026. 3. 18. 20:52·EffectivePython_125
반응형

오늘은 여러 리스트나 이터레이터를 동시에 다룰 때 인덱스로 접근하지 말고

왜 zip을 써야 하는가에 대한 본질적인 이유와 주의점을 공부해 보자. 

 

일단 우리가 익숙한 인덱스 접근의 문제점을 살펴보도록 하자. 

names = ['김도훈', '김석범생이', '유동남서북치고장구치고']
counts = [len(n) for n in names]

longest_name = None
max_count = 0

for i, name in enumerate(names):
    count = counts[i]
    if count > max_count:
        longest_name = name
        max_count = count

 

가장 긴 이름을 가진 단어와 그 길이를 구하는 코드이다. 

물론 지금도 원하는 기능을 수행하지만, 코드가 뭔가 좀 지저분하다는 느낌을 지울 수가 없다.(책 말로는 그렇다고 한다)

 

그렇다면 같은 기능을 하는 코드를 좀 더 pythonic 하게 작성해보도록 하자. -> zip을 사용한다

names = ['김도훈', '김석범생이', '유동남서북치고장구치고']
counts = [len(n) for n in names]

longest_name = None
max_count = 0

for name, count in zip(names, counts):
    if count > max_count:
        longest_name = name
        max_count = count

 

솔직히 한 줄 차이라 큰 차이가 없어보이긴 하지만 그래도 가독성이 좋아졌다. 

참조해야 할 배열이 두 개 이상(세개, 네 개도 가능하다)이라면 for 문 안에서 직접 튜플을 언패킹 할 수 있어

코드도 깔끔해지고, 메모리 효율성도 좋다(이터레이터에서 한 번에 한 항목씩 가져오는 지연 방식으로 동작하기 때문).

 

하지만 주의해야 할 점도 있다 : "조용한 잘림(Silent Truncation) 현상"

만약 묶어주는 이터레이터들의 길이가 서로 다르면 오류 없이 조용하게 출력이 되지 않는 일이 생길 수 있다. 

names.append('김수호랑이빨')
for name, count in zip(names, counts):
    print(name)

# 출력:
# 김도훈
# 김석범생이
# 유동남서북치고장구치고

 

이러한 잘림 현상을 미연에 방지하고 싶다면,

zip(names, counts, strict = True)를 통해 ValueError를 발생시킬 수 있다.

 

오늘은 여러 리스트나 이터레이터를 동시에 다룰 때 유용한 zip에 대해 알아보았다!

반응형

'EffectivePython_125' 카테고리의 다른 글

[20] Never Use for Loop Variables After the Loop Ends  (2) 2026.03.20
[19] Avoid else Blocks After for and while Loops  (3) 2026.03.19
[17] Prefer enumerate over range  (3) 2026.03.17
[16] Prefer Catch-All Unpacking over Slicing  (2) 2026.03.11
[15] Avoid Striding and Slicing in a Single Expression  (3) 2026.03.10
'EffectivePython_125' 카테고리의 다른 글
  • [20] Never Use for Loop Variables After the Loop Ends
  • [19] Avoid else Blocks After for and while Loops
  • [17] Prefer enumerate over range
  • [16] Prefer Catch-All Unpacking over Slicing
AglioOglio
AglioOglio
데이터분석, 딥러닝 공부하고 있습니다.
  • AglioOglio
    It것저것
    AglioOglio
  • 전체
    오늘
    어제
    • 분류 전체보기 (98)
      • Stanford CS224N Lectures (10)
        • 강의정리 (8)
        • assignment (2)
      • 논문리뷰 (1)
        • NLP (11)
        • CV (1)
      • 구현 (3)
      • DL (10)
        • CV (1)
        • NLP (9)
      • 딥러닝 기초 (3)
      • 파이토치 기초 (5)
      • 알고리즘 (30)
        • BOJ (30)
      • 시계열분석(Time Series Analysis) (1)
      • ML (0)
      • EffectivePython_125 (20)
      • 이것저것 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    effective python 125
    Baekjoon
    125
    백준
    딥러닝
    Stanford
    Transformer
    attention
    Python
    RNN
    pytorch
    effective python
    자연어처리
    harvard nlp
    논문리뷰
    NLP
    CS224N
    Effective
    word2vec
    파이썬
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
AglioOglio
[18] Use zip to Process Iterators in Parallel
상단으로

티스토리툴바