Better way 8. zip 사용

이현준·2022년 7월 6일
0

Effective Python

목록 보기
3/4

Effective Python 파이썬 코딩의 기술을 공부한 내용을 기록하며 정리하기 위한 글 입니다.


list 타입을 다룰 때, 리스트 컴프리헨션 을 사용하면 소스 list에서 새로운 list를 파생시키기 쉽다.

names = ['aaaa','bb','ccccc']
cnt = [len(n) for n in names]

>>> [4,2,5]

만들어진 list의 각 원소는 소스 list에서 같은 인덱스 위치에 있는 원소와 관련이 있어서, 두 리스트를 동시에 이터레이션 하 경우 names 소스 리스트의 길이를 사용하면 된다.

longest_name = None
max_count = 0

for i in range(len(names)):
	cnt = cnt[i]
    if cnt > max_count:
    	longest_name = names[i]
        max_count = cnt
        
print(longest_name)

>>> aaaa

위 코드를 시각적으로 깔끔하게 표현하기 위해 파이썬의 내장함수인 zip을 이용한다.

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

입력 이터레이터의 길이가 서로 다르다면, zip 함수는 짧은 이터레이터의 길이를 기준으로 값을 반환한다. 그래서 'names' 리스트에 추가된 'ddd'가 출력되지 않는다.

names.append('ddd')
for name, count in zip(names, cnt):
	print(name)
    
 >>> aaaa
 >>> bb
 >>> ccccc

이러한 단점을 보완하기 위해서는 itertools 내장 모듈에 들어 있는 zip_longest를 사용하면 된다.

import itertools

for name, cnt in itertools.zip_longest(names,cnt):
	print(f'{name}:{cnt}')

>>> aaaa:4
>>> bb:2
>>> ccccc:5
>>> ddd:None
profile
기록, 정리하는 습관 만들기

0개의 댓글