이펙티브 파이썬 Item 27. map과 filter 대신 컴프리헨션을 사용하라

    요약

    • 리스트 컴프리헨션은 람다식을 사용하지 않기 때문에 람다식을 사용하는 map, filter 대비 가독성이 좋음.
    • 리스트 컴프리헨션을 이용하면 조건식을 이용해 간단히 특정 원소를 스킵할 수 있음. 그러나 map을 사용할 때는 filter 함수의 도움을 받아야 함. 

    결론은 map, filter를 사용하면 람다 함수를 사용해야 한다. 그런데 람다 함수는 이름을 가지지 않으므로 람다 함수가 무슨 일을 하는지 이해하기 어렵다. 따라서 가독성이 떨어지는 코드가 된다.

     

     

    Item 27. map과 filter 대신 컴프리헨션을 사용하라

    # 짝수를 제곱한 값 구하기
    a = [1, 2, 3, 4, 5, 6, 7, 8]
    
    # 컴프리헨션 이용
    even_squares = [x ** 2 for x in a if x % 2 == 0]
    
    # map, filter 이용. 
    even_squares_with_map = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, a))))
    • 리스트 컴프리헨션은 내부적으로 if문을 이용해 특정 원소를 사용하지 않을 수 있다.
    • 그러나 map은 내부에서 특정 원소를 사용하지 않으려면 filter 함수를 사용해야한다.

    리스트 컴프리헨션은 단순한 조건씩 한 개만으로 해결할 수 있으나, map을 사용할 때는 map / filter에 써야하는 람다식을 2개나 제공해야한다. 람다 함수는 이름이 없기 때문에 간단한 조건식이 아니면 함수가 무슨 일을 하는지 알기 어렵다. 가독성이 떨어진다는 이야기인데, 람다 함수가 없는 리스트 컴프리헨션이 더 읽기 편한다. 

    결론적으로 Map, Filter를 사용해 리스트를 만들어야 하는 경우라면 리스트 컴프리헨션을 이용해서 더 가독성 좋은 코드를 만드는 것이 좋다.

     

     

     

     

     

     

    댓글

    Designed by JB FACTORY