더북(TheBook)

문제는 이 루프가 시각적으로 잡음이 많다는 것이다. 인덱스를 사용해 namescounts의 원소를 찾는 과정이 코드를 읽기 어렵게 만든다. 배열 인덱스 i를 사용해 배열 원소를 가져오는 연산이 두 번 일어난다. enumerate를 사용하면(Better way 7: ‘range보다는 enumerate를 사용하라’ 참고) 약간 나아지지만, 이 코드도 여전히 이상적이지는 않다.

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

이런 코드를 더 깔끔하게 만들 수 있도록 파이썬은 zip이라는 내장 함수를 제공한다. zip은 둘 이상의 이터레이터를 지연 계산 제너레이터를 사용해 묶어준다. zip 제너레이터는 각 이터레이터의 다음 값이 들어 있는 튜플을 반환한다. 이 튜플을 for 문에서 바로 언패킹할 수 있다(Better way 6: ‘인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라’ 참고). 이렇게 만든 코드는 인덱스를 사용해 여러 리스트의 원소에 접근하는 코드보다 훨씬 깔끔하다.

for name, count in zip(names, counts):
    if count > max_count:
        longest_name = name
        max_count = count
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.