map과 filter대신 컴프리헨션을 사용하자

Minsang Yu·2023년 10월 3일
0

파이썬은 다른 시퀸스나 이터러블에서 새 리스트를 만들어내는 간결한 구문을 제고한다. 이런 식을
리스트 컴프리헨션 이라고 한다.

리스트 컴프리헨션을 사용해 루프로 처리할 대상인 입력 시퀸스의 원소에 적용할 변환식을 지정함으로서 다음과 같은 결과를 얻을수 있다.

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]

컴플헨션은 python 리스트 처리에 사용되는 map과 filter의 두가지 기능을 시각적 잡음이 적게 가독성이 높게 표현할 수 있다.


map 함수

  • map 함수는 주어진 함수를 시퀀스(주로 리스트)의 각 요소에 적용하여 새로운 시퀀스(리스트)를 생성합니다.

  • 주로 map 함수는 원본 시퀀스의 모든 요소에 동일한 함수를 적용하여 결과를 얻는 데 사용됩니다.

  • map 함수의 기본 구문은 다음과 같습니다

numbers = [1, 2, 3, 4, 5]
doubled = map(lambda x: x * 2, numbers)
# doubled는 [2, 4, 6, 8, 10]으로 매핑됨

filter 함수

  • filter 함수는 주어진 함수를 시퀀스(주로 리스트)의 각 요소에 적용하여 함수가 True를 반환하는 요소만을 걸러내는 새로운 시퀀스(리스트)를 생성합니다.

  • 주로 filter 함수는 원본 시퀀스에서 특정 조건을 만족하는 요소들을 선택하는 데 사용됩니다.

  • filter 함수의 기본 구문은 다음과 같습니다

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
# even_numbers는 [2, 4, 6, 8, 10]으로 필터링됨

map과 filter대신 컴프리헨션사용

mapfilter 함수를 컴프리헨션으로 대체할 수 있습니다. 컴프리헨션을 사용하면 코드가 더 간결해지고 가독성이 향상될수 있습니다.

1. map 함수 대체

# map 함수를 컴프리헨션으로 대체
numbers = [1, 2, 3, 4, 5]
doubled_map = map(lambda x: x ** 2, numbers) # map 사용 
doubled_comprehension = [x * 2 for x in numbers] # list comprehension 사용 
# doubled는 [2, 4, 6, 8, 10]으로 생성됨

2. filter 함수 대체

# filter 함수를 컴프리헨션으로 대체
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers_filter = filter(lamda x: x%2 ==0, numbers)
even_numbers_comprehension = [x for x in numbers if x % 2 == 0]
# even_numbers는 [2, 4, 6, 8, 10]으로 필터링됨

정리

  • 리스트 컴프리헨션은 lambda 식을 사용하지 않기 때문에 같은 일을 하는 map과 filter 내장함수를 사용하는 것 보다 더 명확하다.
  • 리스트 컴프리헨션을 사용하면 쉽게 입력 리스트의 원소를 건너뛸 수 있다. 하지만 map을 사용하는 경우에는 filter의 도움을 받아야한다.
  • 딕셔너리와 집합도 컴프리헨션을 사용할수 있다.
profile
Jr. DataEngineer

0개의 댓글