파이썬은 다른 시퀸스나 이터러블에서 새 리스트를 만들어내는 간결한 구문을 제고한다. 이런 식을
리스트 컴프리헨션 이라고 한다.
리스트 컴프리헨션을 사용해 루프로 처리할 대상인 입력 시퀸스의 원소에 적용할 변환식을 지정함으로서 다음과 같은 결과를 얻을수 있다.
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 함수의 기본 구문은 다음과 같습니다
numbers = [1, 2, 3, 4, 5]
doubled = map(lambda x: x * 2, numbers)
# doubled는 [2, 4, 6, 8, 10]으로 매핑됨
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
함수를 컴프리헨션으로 대체할 수 있습니다. 컴프리헨션을 사용하면 코드가 더 간결해지고 가독성이 향상될수 있습니다.
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]으로 필터링됨
정리