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