더북(TheBook)

BETTER WAY 7
map과 filter 대신 리스트 컴프리헨션을 사용하자

 

 

파이썬에는 한 리스트에서 다른 리스트를 만들어내는 간결한 문법이 있다. 이 문법을 사용한 표현식을 리스트 컴프리헨션(list comprehension; 리스트 함축 표현식)이라고 한다. 예를 들어 리스트에 있는 각 숫자의 제곱을 계산한다고 하자. 다음과 같이 계산식과 루프로 돌릴 입력 시퀀스를 작성해서 이 계산을 수행할 수 있다.

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

squares = [x**2 for x in a]

print(squares)

 

>>>

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

인수가 하나뿐인 함수를 적용하는 상황이 아니면, 간단한 연산에는 리스트 컴프리헨션이 내장 함수 map보다 명확하다. map을 쓰려면 계산에 필요한 lambda 함수를 생성해야 해서 깔끔해 보이지 않는다.

squares = map(lambda x: x ** 2, a)

 

map과 달리 리스트 컴프리헨션을 사용하면 입력 리스트에 있는 아이템을 간편하게 걸러내서 그에 대응하는 출력을 결과에서 삭제할 수 있다. 예를 들어 2로 나누어 떨어지는 숫자의 제곱만 계산한다고 하자. 다음 예에서는 루프 뒤에 조건식을 추가해서 계산을 수행한다.

even_squares = [x**2 for x in a if x % 2 == 0]

print(even_squares)

 

>>>

[4, 16, 36, 64, 100]

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.