-
Python map, filter, reduce🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/🐍 𝖯𝗒𝗍𝗁𝗈𝗇 2021. 6. 26. 14:53
Map
리스트의 요소에 함수를 적용시켜서 새로운 결과를 리턴하고 싶을 때 사용하는 내장함수이다.
원본 리스트를 변경하지 않고 새 리스트를 생성한다.
ex) 숫자로 구성된 리스트에서 각 요소의 값을 제곱하여 다시 새로운 리스트를 생성하고 싶을 때
- map을 사용하지 않는다면?
#일반적인 방법 numbers = [1, 2, 3, 4, 5] squaredNumbers = list() for number in numbers: squaredNumbers.append(number*number) #list comprehension numbers = [1, 2, 3, 4, 5] squaredNumbers = [number*number for number in numbers]
- map을 사용한다면?
numbers = [1, 2, 3, 4, 5] squaredNumbers = list(map(lambda x: x**2, numbers))
list를 붙이는 이유는 map함수가 반환하는 것이 실제 list자료형이 아닌 iterator객체이기 때문에,
자유롭게 쓰고자 list로 반환하여 사용한다. set이나 tuple로도 변환할 수 있다 !!
더보기💡 lambda란?
lambda는 메모리를 아끼고 가독성을 향상시키는 익명함수이다. 한번 쓰이고 나면 메모리 영역 heap에서 사라진다.
파이썬은 모든 것이 객체로써 관리되기 때문에 카운터가 0이 되면 메모리를 반환한다.
함수는 객체를 만들고, 재사용을 위해서 메모리를 할당하는데, 참조하는 것이 없을 때 메모리에서 반환되는데,
람다는 라인이 종료되면 메모리에서 반환된다.
- input().split()과 map
input().split()에서 값을 여러개 입력받고, 정수, 실수로 변환할 때도 map을 사용했었는데,
그것이 가능한 이유가 input().split()이 반환하는 것이 문자열 리스트이기 때문이다.
map이 반환하는 map객체가 iterator객체여서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하다.
a, b = map(int, input().split())처럼 list를 생략한 이유이다.
Filter
리스트의 요소에 함수를 적용시켜서 원하는 요소만을 리턴하고 싶을 때(조건에 일치하는 것만) 사용하는 함수이다.
ex) 1부터 100까지 숫자가 있는 리스트에서 짝수만을 추출하고 싶을 때
- filter를 사용하지 않는다면?
#일반적인 방법 numbers = list(range(1,101)) squared = list() for number in numbers: if number%2 == 0: squared.append(number) #list comprehension numbers = list(range(1,101)) squared = [number*number for number in numbers if number%2 == 0]
- filter를 사용한다면?
numbers = list(range(1,101)) squared = list(filter(lambda x: x%2==0, numbers))
filter(적용시킬 함수, 적용할 요소들)
함수의 결과가 참인지 거짓인지에 따라, 해당 요소를 포함할지를 결정한다.
Reduce
reduce는 파이썬3부터 내장함수가 아니기 때문에 import를 해야한다.
from functools import reduce
reduce(함수, 반복가능한 객체)
리스트의 요소를 순서대로 계산한뒤 누적된 결과를 반환한다.
from functools import reduce def plus(x, y): return x+y numbers = [1, 2, 3, 4, 5] reduce(plus, numbers) # 15 # (((1 + 2)+3)+4)+5
lambda 식을 사용하면,
from functools import reduce numbers = [1,2,3,4,5] reduce(lambda x, y: x+y, numbers) #15
반복해서 연습해야겠다! 👶🏻