문제는 이 루프가 시각적으로 잡음이 많다는 것이다. 인덱스를 사용해 names와 counts의 원소를 찾는 과정이 코드를 읽기 어렵게 만든다. 배열 인덱스 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