Lambda, Map, Filter, Zip, Reduce

hyyyynjn·2021년 8월 5일
0

python 정리

목록 보기
13/26
post-thumbnail
post-custom-banner

✅Lambda

람다는 이름없이 선언할 수 있는 익명 함수이다.

  • lambda arguments: expression 형식을 따른다.
# (a+b)^2
answer = lambda a, b: a**2 + b**2 + 2*(a+b)
print(answer(3, 6))

✅Map

loop 없이 지정된 element 들을 반복한다

  • map(function,iterables) 형식을 따른다
def add_list(a,b):
    return a+b
output = list(map(add_list,[2,6,3],[3,4,5]))
print(output) # [5, 10, 8]

📌Loop vs Map vs List Comprehension 속도 차이

Never use the builtin map!!
👉 use a list comprehension

# Loop
for entry in entries:
    process(entry)
# Map
map(process, entries)

# List Comprehension
[process(entry) for entry in entries]



# Loop
results = []
for entry in entries:
    results.append(process(entry))
    
# Map
results = map(process, entries)

# List Comprehension
results = [process(entry) for entry in entries]



✅Filter => list comprehension으로

주어진 조건에 따라 값을 걸러내는 내장 함수

  • filter(function,iterable) 형식을 따른다
  • list comprehension으로 작성한 코드가 2배 이상 빠르다.
output = list(filter(lambda a: a > 0, [1, -2, 3, -4, 5, 6]))
print(output)  # [1, 3, 5, 6]

output = list([a for a in [1, -2, 3, -4, 5, 6] if a > 0])
print(output)  # [1, 3, 5, 6] 속도가 더 빠르다

✅Zip

n개의 iterables들의 데이터를 추출하여 튜플로 변경하는 내장 함수

  • zip(*iterables) 형식을 따른다
user_id = ["12121","56161","33287","23244"]
user_name = ["Mick","John","Tessa","Nick"]
user_info = list(zip(user_name,user_id))
print(user_info) # [(‘Mick’, ‘12121’), (‘John’, ‘56161’), (‘Tessa’, ‘33287’), (‘Nick’, ‘23244’)]

✅Reduce

주어진 iterable의 모든 요소에 동일한 작업을 적용할 때 사용된다.

  • functools 모듈 함수이다
  • functools.reduce(function, iterable) 형식을 따른다
import functools
def sum_two_elements(a,b):
    return a+b

numbers = [6,2,1,3,4]
result = functools.reduce(sum_two_elements, numbers)
print(result) # sum(numbers)와 같은 결과가 나온다.

numbers = [i for i in range(1, 10)]
result = functools.reduce(lambda a, b: a * b, numbers)
print(result) # 10!와 같은 결과가 나온다.
post-custom-banner

0개의 댓글