νμ΄μ¬ lambda, filter, reduce
2021. 5. 18. 02:48γBackend/π Python
μνμ€ν: μ μ²λ¦¬μ reduce, map, filter μ¬μ© (3νμ )
μ΅λͺ ν¨μ Lambda
- ν¨μλ νν μ°λ¦¬κ° μλ μΌλ°ν¨μμ μ΅λͺ ν¨μλ‘ λλ μ μλ€.
- μ΅λͺ ν¨μλ μΌλ°ν¨μμ λ¬λ¦¬ νΈμΆλ ν μ¦μ μλ©Έλλ€. (μΌλ°ν¨μλ λ°ν νμλ λ©λͺ¨λ¦¬ μ‘μλ¨Ήλλ€)
- μ΅λͺ ν¨μλ μΌλ°ν¨μλ³΄λ€ κ°κ²°νκ² μμ±νμ¬ μ¬μ©ν μ μλ€.
- μ΄λ¬ν νΉμ±μΌλ‘ lambda(μ΅λͺ ν¨μ)ν¨μλ κ°κ²°νκ³ μΌνμ±μΌλ‘ μ¬μ©ν ν¨μ μμ±μ μ¬μ©λλ€.
# μΌλ°ν¨μ
def func_name(a, b):
return a + b
# μ΅λͺ
ν¨μ
total = lambda a, b: a + b
# μ΅λͺ
ν¨μλ ν¨μλͺ
μ νλλΌ κ³¨ μν μΌλ μλ€. (λ§ κ·Έλλ‘ 'μ΅λͺ
' ν¨μ)
lambda ν¨μ μμ
- 1~10κΉμ§μ μμ°μλ₯Ό κ°κ° μ κ³±νμ¬ λ¦¬μ€νΈμ μ μ₯ν΄λ³΄μ.
- μΌλ°ν¨μλ₯Ό μ¬μ©νμ¬ λ΄λΆμμ forλ¬Έ λ리λ λμ , lambda μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ©΄ μμ½κ² μ²λ¦¬ν μ μλ€.
digits1 = [x * 10 for x in range(1, 11)] # 10κ°μ μμ κ°μ§ 리μ€νΈ μμ±
# νλ² μ¬μ©νκ³ λ§λ, μΌνμ©μ, μ¦μ μ¬μ©νλ : lambda
result = map(lambda i: i ** 2, digits1)
print(result)
# >>> <map object at 0x1098b9370> : ν λ³ν νμ (list casting)
μμ resultλ₯Ό μΆλ ₯νλ©΄ casting λκΈ° μ μ objectννμ κ°μ΄ μΆλ ₯λλ€. μ¦ μ°λ¦¬κ° μ½κ² νμΈν μ μλ λ°μ΄ν° νμ μΌλ‘ ν λ³νμ΄ νμνλ€.
# μμ κ²°κ³Όμμ list()λ₯Ό μ¬μ©νμ¬ νλ³ν ν΄μ€λ€.
result = list(map(lambda i: i ** 2, digits1))
print("Ex 2 >", result)
# >>> Ex 2 > [100, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100, 10000]
labmda κ²°λ‘
- μΌλ°ν¨μλ μ¬μ¬μ©μ± μν΄ λ©λͺ¨λ¦¬μ μ μ₯λκΈ° λλ¬Έμ garbage collector μμ νν°λ§μ΄ λμ§ μλλ€. (λμΆ© λ©λͺ¨λ¦¬ μ‘μλ¨Ήλλ€λ μ리)
- λ°λλ‘ lambda ν¨μλ μ¬μ©λ μ§ν, python garbage collectorμ μν΄ κ³§ λ°λ‘ μ κ±°λλ€. (λ©λͺ¨λ¦¬ ν¨μ¨μ± μ¦λ)
- κ·Έλ¬λ―λ‘ μΌνμ±μΌλ‘ μ¬μ©νκ³ μΆμ ν¨μλ, λ©λͺ¨λ¦¬λ₯Ό μ‘μ§ μλ λλ€(μ΅λͺ ν¨μ)λ₯Ό μ¬μ©νλ€.
- μ¦, λλ€μ μ₯μ μ κ°κ²°μ±κ³Ό λ©λͺ¨λ¦¬ ν¨μ¨μ±μ μλ€.
filter()
- filter() λ©μλλ trueμΈ μ‘°κ±΄λ§ λ°ννλ ν¨μλ‘, lamada ν¨μμμ true 쑰건μ λ§λ λ°μ΄ν°λ§ filtering νμ¬ μ μ₯ν μ μλ€.
- νΉμ 쑰건μΌλ‘ κ±Έλ¬μ κ±Έλ¬μ§ μμλ€λ‘ iteratorκ°μ²΄λ₯Ό λ§λ€μ΄μ 리ν΄ν΄μ€λ€. (μΆμ²: μν€λ μ€)
1~10κΉμ§ μμ°μ μ€ 2μ λ°°μλ§ λ¦¬μ€νΈμ μ μ₯νλ€κ³ νμ λ, νν forλ¬Έ κ³Ό ifλ¬Έμ μ¬μ©νμ¬ λ¦¬μ€νΈμ μ μ₯νλ € νλ€.
λ°λ©΄ filterμ lambda ν¨μλ₯Ό μ¬μ©νλ©΄, for, if 쑰건문μ μ¬μ©νμ§ μμλ λλ€.
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# λλ€μ 쑰건μμ΄ λ€μ΄κ°λ©΄ filter μΉλ€ => 쑰건μ true μμλ§ resultμ μ μ₯λλ€.
result = list(filter(lambda x: x % 2 == 0, digits))
print(result)
# >>> [2, 4, 6, 8, 10]
reduce()
- reduce(μ§κ³ ν¨μ, μν κ°λ₯ν λ°μ΄ν°[, μ΄κΈ°κ°])
- reduce() ν¨μλ sequence λ°μ΄ν°μμ μμλ₯Ό λμ ν λ μ¬μ©ν μ μλ€.
- μ΄κΈ°κ°μ μλ΅λ κ²½μ° 0μΌλ‘ μ΄κΈ°ν λλ€.
- λ¬Έμνμ λν΄μλ reduce λμ ν©κ³ κ°λ₯
# Ex 4 : reduce
# sequence ν λ°μ΄ν°μμ μμλ₯Ό λμ ν λ μ¬μ© κ°λ₯
from functools import reduce
digits3 = [x for x in range(1, 6)]
# >>> [1, 2, 3, 4, 5]
reduceμ μ°μ°κ³Όμ μ νμ΄μ°λ©΄
result = reduce(lambda x, y: x + y, digits3)
>>> 0
0
>>> 0 + 1
1
>>> 1 + 2
3
>>> 3 + 3
6
>>> 6 + 4
10
>>> 10 + 5
15
print(result) # 1~5 λμ ν©
>>> 15
μ¦ 1λΆν° 5κΉμ§μ, digits3 리μ€νΈμ λͺ¨λ κ°λ€μ μ°¨λ‘λ‘ λμ νλ κ³Όμ μ νμΈν μ μλ€.
'Backend > π Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Django Bootstrap4 μ°λ (0) | 2021.05.23 |
---|---|
νμ΄μ¬ λ©μλ μ€λ²λΌμ΄λ©, μ€λ²λ‘λ© (2) | 2021.05.18 |
νμ΄μ¬ κΉμ 볡μ¬, μμ λ³΅μ¬ (shallow copy, deep copy) (0) | 2021.05.18 |
μΈνλ° λ¦¬ν2κΈ° OT (0) | 2021.03.10 |
[νμ΄μ¬] 2μ°¨μ 리μ€νΈλ₯Ό 1μ°¨μ 리μ€νΈλ‘ λ§λ€κΈ° (0) | 2020.12.30 |