2-2. 필수 문법 ( 배열 관련 함수 )
순서가 있는 시퀀스형 데이터 즉, 배열을 다룰 때 유용하게 쓸 수 있는 함수를 배워보자.
배열은 어느 분야이든 쓰이는 데이터 형태이므로 익혀두면 도움이 될 것이다!
- TMI ) Reduce와 Map은 스터디를 하면서 한번 정리한 적이 있어서, 어느정도 알고 있는데 Lambda와 Filter는 아직 어색한 것 같다. 빨리 익숙해져야겠다.
Sequence type function
- 오늘의 키워드
- lambda, reduce, map, filter
lambda
익명 함수로, 힙 영역에서 사용 즉시 소멸되는 함수다.
장점
- 일회용성 함수로 메모리를 아끼는 것이 가능하다.
- pythonic하게 코드를 짤 수 있다.
- 파이썬 가비지 컬렉터 에 count가 0으로 취급된다.
GC는 불필요한 변수나 참조를 알아서 정리해서 메모리를 관리해주는 과정이다.일반 함수와 비교
- 일반 함수 : 재사용성을 위해 메모리에 저장한다.
- 람다 함수 : 내부적으로 call을 할때마다 제너레이터 객체(iterate)를 리턴하기 때문에 메모리의 낭비가 적다.
#세 수의 합을 더하는 함수를 만들 때
#한번 사용할거라면 익명함수 lambda 만들어주기
cul = lambda a,b,c : a+b+c
print('ex 1 >',cul(1, 2, 3))
map
리스트 모든 요소들을 연산 처리한 뒤 그 결과를 반환하고 싶을 때 사용한다.
- 각각 함수의 매개변수로 적용해준 뒤, 그 결과를 이터레이트 한 객체 형태로 받아온다.
- next를 통해 객체의 다음 요소를 때올 수 있다.
- map 함수는 인자를 두개 받는다.
map(함수, 시퀀스)
- 결과가 제너레이터가 반환되므로 list()로 묶어서 형변환을 해줘야한다.
digits1 = [ x * 10 for x in range(1,11)]
# 리스트에 1~10를 넣어준다.
# (함수, 시퀀스)
result = map(lambda i: i**2, digits1)
# map object로 출력이 된다.
print('ex 2 >',result)
# list로 형변환을 해줘야 출력이 된다.
print('ex 2 >',list(result))
# 람다 이용하기
def ex2_func(x):
return x**2
result_without_lambda = map(ex2_func, digits1)
print('ex 2 >', list(result_without_lambda))
def also_square(nums):
def double(x):
return x**2
return map(double,nums)
# 기능별로 모듈화를 해서 은닉화 가능
print('ex 2 >',list(also_square(digits1)))
- map의 함수 인자는 당연히 람다함수로 대체할 수 있다.
⭐️ 람다를 이용하면 가비지 컬렉터에서 필터가 된다.
filter
특정 조건에 해당하는 값만 따로 모아서 시퀀스형으로 리턴해준다.
- map과 동일한 인자를 받는다.
filter(함수, 시퀀스)
digits = [1,2,3,4,5,6,7,8,9,10]
results = filter(lambda i : i % 2 ==0, digits)
print('ex 3 >',list(results))
def also_evens(nums):
def is_even(x):
return x % 2 == 0
return filter(is_even,nums)
print('ex 3 >',list(also_evens(digits)))
reduce
여러개의 순회가능한 시퀀스형 데이터에서 누적되게 데이터를 계산해야 할 때 사용하면 좋다.
- 모듈을 import 해야만 사용 가능하다.
from functools import reduce
from functools import reduce
digits3 = [ x for x in range(1,101)]
# 가장 마지막 결과값만 반환한다.
result3 = reduce(lambda x,y : x + y, digits3)
print('ex 4 >',result3)
# 출력 : ex 4 > 5050
def also_add(digits3):
def add_plus(x,y):
return x + y
return reduce(add_plus,digits3)
print('ex 4 >',also_add(digits3))
# 출력 : ex 4 > 5050
[출처] 인프런 - 모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
Author And Source
이 문제에 관하여(2-2. 필수 문법 ( 배열 관련 함수 )), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@uoayop/2-2.-필수-문법-배열-관련-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)