pocket

[Python] λžŒλ‹€, μ»΄ν”„λ¦¬ν—¨μ…˜ λ³Έλ¬Έ

Python

[Python] λžŒλ‹€, μ»΄ν”„λ¦¬ν—¨μ…˜

jpocket 2025. 4. 1. 21:13
λ°˜μ‘ν˜•

πŸ”Ά λžŒλ‹€ ν‘œν˜„μ‹μ΄λž€?

컴곡 μ „κ³΅ν•˜λ©΄μ„œ react μ–Έμ–΄λ₯Ό 배우며 ν•™μŠ΅ν–ˆλ˜ λžŒλ‹€.

μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 방법 쀑 ν•˜λ‚˜λ‹€.

λžŒλ‹€λ₯Ό ν‘œν˜„ν•œ 식을 λžŒλ‹€ ν‘œν˜„μ‹ 이라고 λΆ€λ₯΄κ³ ,

λžŒλ‹€ ν‘œν˜„μ‹μœΌλ‘œ μ“΄ ν•¨μˆ˜λŠ” λžŒλ‹€ ν•¨μˆ˜ ν˜Ήμ€ 읡λͺ… ν•¨μˆ˜ 라고 ν•œλ‹€.

 

 

 

Q. μ™œ 읡λͺ…ν•¨μˆ˜ 일까?

ν•¨μˆ˜μ— 이름이 μ—†μ–΄μ„œ.

 

 

 

ν‘œν˜„ 방식

(lambda λ³€μˆ˜ : 리턴식 )

πŸ”₯ ν•œ 쀄 μš”μ•½

ν•¨μˆ˜ 이름이 μ—†λ‹€. -> λ”°λΌμ„œ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜μ—¬ μž¬ν˜ΈμΆœν•˜μ—¬μ•Ό ν•œλ‹€. 
lambda λ°”λ‘œ 뒀에 λ§€κ°œλ³€μˆ˜ μž‘μ„±ν•œλ‹€. :(콜둠)으둜 κ΅¬λΆ„ν•˜μ—¬ 이후 리턴값 μž‘μ„±ν•œλ‹€.
λžŒλ‹€ ν‘œν˜„μ‹ μ•ˆμ— μƒˆ λ³€μˆ˜ 생성 x
λ°˜ν™˜κ°’ 뢀뢄은 식 ν•œ μ€„λ‘œ ν‘œν˜„ν•  수 μžˆμ–΄μ•Ό ok

 

 

 


λžŒλ‹€ ν‘œν˜„μ‹μ„ 인수둜 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜ 3κ°€μ§€

  • map(): 리슀트의 μš”μ†Œλ₯Ό μ§€μ •λœ ν•¨μˆ˜λ‘œ μ²˜λ¦¬ν•΄μ£ΌλŠ” ν•¨μˆ˜
  • filter(): κ±ΈλŸ¬μ£ΌλŠ”, ν•„ν„°λ§ν•΄μ£ΌλŠ” ν•¨μˆ˜
  • reduce(): λˆ„μ  ν•© κ³„μ‚°ν•΄μ£ΌλŠ” ν•¨μˆ˜

ν•¨μˆ˜λ₯Ό 인수둜 μ“°λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ νš¨μœ¨μ μ΄λ‹€.

 

 

 


πŸ”Ά map()

μ•Œκ³ λ¦¬μ¦˜ μ½”λ”© λ¬Έμ œμ— μ’…μ’… λ‚˜μ˜€λŠ” map() ν•¨μˆ˜λŠ” λ¦¬μŠ€νŠΈλ‚˜ νŠœν”Œ 등에 νŠΉλ³„ν•œ 처리λ₯Ό ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜

list or tuple ν˜•νƒœλ‘œ λ°˜ν™˜

 

 

ν‘œν˜„ 방식

map( ν•¨μˆ˜, μ μš©ν•  κ°’(νŠœν”Œ or 리슀트) )

 

 

 

파이썬3λΆ€ν„°λŠ” list() or tuple() ν•¨μˆ˜λ‘œ λ¬Άμ–΄μ£Όμ–΄μ•Ό μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 리턴받을 수 μžˆλ‹€.

list(map(function, list))
tuple(map(function, list))

 

 

 

πŸ”Ά map() + 일반 ν•¨μˆ˜

# 일반 ν•¨μˆ˜
def second(x):
    results = x * 2
    return results

# 리슀트 
two = [i for i in range(10)]

# map() + μΌλ°˜ν•¨μˆ˜
list(map(second, two))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

 

πŸ”Ά map() + λžŒλ‹€ ν•¨μˆ˜

# 리슀트
two = [i for i in range(10)]

# map() + λžŒλ‹€ ν•¨μˆ˜
list(map(lambda x : x * 2, two))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

 

 


πŸ”Ά filter()

λ¦¬μŠ€νŠΈμ— λ“€μ–΄μžˆλŠ” μ›μ†Œλ“€μ„ ν•¨μˆ˜μ— μ μš©μ‹œμΌœμ„œ κ²°κ³Όκ°€ 참인 κ°’λ“€λ‘œ κ΅¬μ„±λœ μƒˆλ‘œμš΄ 리슀트λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

 

 

 

ν‘œν˜„ 방식

filter( ν•¨μˆ˜, 리슀트 )

 

 

 

πŸ”Ά filter() + 일반 ν•¨μˆ˜

# 일반 ν•¨μˆ˜
def odd(x):
    if x % 2 == 1:
        return x

# 리슀트
two = [i for i in range(10)]

# list(filter() + 일반 ν•¨μˆ˜)
list(filter(odd, two))
[1, 3, 5, 7, 9]

 

 

 

πŸ”Ά filter() + λžŒλ‹€ ν•¨μˆ˜

# list(filter() + λžŒλ‹€ ν•¨μˆ˜)
list(filter(lambda x : x % 2, two))

 

 

 

κ΄€λ ¨ 문제)

# Q. λ‹€μŒ 리슀트λ₯Ό 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό filter() ν•¨μˆ˜μ™€ λžŒλ‹€ ν‘œν˜„μ‹μ„ μ΄μš©ν•΄ κ΅¬ν˜„ν•΄λ³΄μ„Έμš”!
# [4, 5, 6]

quiz_list = [i for i in range(10)]
list(filter( lambda x: x>=4 and x<=6 , quiz_list ))

 

μ—¬κΈ°μ„œ 쑰건식에  x>=4 and x<=6  μ΄λ ‡κ²Œ μž‘μ„±ν•˜μ˜€μ§€λ§Œ

4 <= x <= 6 μ΄λ ‡κ²Œ 적어도 λœλ‹€.

νŒŒμ΄μ¬μ—μ„œλŠ” 체인비ꡐ 연산이 κ°€λŠ₯ν•΄μ„œλ‹€.

 

 

 


πŸ”Ά reduce()

μ΄ν„°λŸ¬λΈ” 객체의 각 μš”μ†Œλ₯Ό μ§€μ •λœ ν•¨μˆ˜λ‘œ μ²˜λ¦¬ν•œ λ’€, 이전 결과에 λˆ„μ ν•΄μ„œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

 

 

 

ν‘œν˜„ 방식

reduce( ν•¨μˆ˜, μ΄ν„°λŸ¬λΈ” 객체 )

 

 

 

reduce()λŠ” 파이썬 3λΆ€ν„° λ‚΄μž₯ ν•¨μˆ˜κ°€ μ•„λ‹ˆλ‹€.

λ”°λΌμ„œ functools λͺ¨λ“ˆμ—μ„œ reduce()λ₯Ό 가져와야 ν•œλ‹€.

πŸ”₯ ν•œ 쀄 μš”μ•½

importλ₯Ό ν•΄μ•Ό ν•œλ‹€λŠ” 말이닀. ν•΄λ‹Ή μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.
from functools import reduce

 

 

 

πŸ”Ά reduce() + 일반 ν•¨μˆ˜

# λͺ¨λ“ˆ import
from functools import reduce

# 일반 ν•¨μˆ˜
def f(x, y):
    return x * y

# 리슀트
a = [1, 2, 3, 4, 5]

# reduce(일반 ν•¨μˆ˜, μ΄ν„°λŸ¬λΈ” 객체)
reduce(f, a)
120

 

 

 

πŸ”Ά reduce() + λžŒλ‹€ ν•¨μˆ˜

# 리슀트
a = [1, 2, 3, 4, 5]

# reduce(λžŒλ‹€ ν•¨μˆ˜, μ΄ν„°λŸ¬λΈ” 객체)
reduce(lambda x, y : x * y, a)
120

 

 

 

μ˜ˆμ‹œ 문제) 

# Q. 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜κ³Ό λžŒλ‹€ ν‘œν˜„μ‹μ„ μ΄μš©ν•΄ 1λΆ€ν„° 100κΉŒμ§€μ˜ 합을 κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό κ΅¬ν˜„ν•΄λ³΄μ„Έμš”!
from functools import reduce

a = [i for i in range(1, 101)]
# print(a)

b = reduce(lambda x, y: x + y, a)
print(b)

λˆ„μ μ΄κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜μ—λŠ” 인자λ₯Ό 2개 ν•„μš”λ‘œ ν•œλ‹€. 이λ₯Ό μ΄μ§„ν•¨μˆ˜ 라고 λΆ€λ₯Έλ‹€.

μ΄λ ‡κ²Œ lambda ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 있게 λœλ‹€.

μ—¬κΈ°μ„œ, μ»΄ν”„λ¦¬ν—¨μ…˜ κ°œλ…μ΄ λ‚˜μ™€μ„œ μ•„λž˜μ—μ„œ κ°„λž΅νžˆ μ„€λͺ…ν•˜κ³ μž ν•œλ‹€.

 

 

 


μ»΄ν”„λ¦¬ν—¨μ…˜

파이썬 문법 쀑 ν•˜λ‚˜λ‘œ, μ—¬λŸ¬ μ€„μ˜ μ½”λ“œλ₯Ό ν•œ μ€„μ˜ μ½”λ“œλ‘œ 쀄일 수 μžˆμ–΄ 직관적이닀.

 

 

 

리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜

πŸ”Ά 반볡문과 μ»΄ν”„λ¦¬ν—¨μ…˜

# 반볡문
list_for = []
for i in range(0, 11, 2):
    list_for.append(i)

print(list_for)

μœ„μ˜ μ½”λ“œλ₯Ό μ»΄ν”„λ¦¬ν—¨μ…˜μ„ μ‚¬μš©ν•˜λ©΄

 

# 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜
[x for x in range(0, 11, 2)]

μ΄λ ‡κ²Œ 쀄일 수 μžˆλ‹€.

빈 리슀트λ₯Ό μ„ μ–Έν•˜μ§€ μ•Šμ•„λ„, κ°€μž₯ λ°”κΉ₯에 λŒ€κ΄„ν˜Έ[ ] 만 써주면 리슀트λ₯Ό μƒμ„±ν•˜κ²Œ λœλ‹€.

λ°˜λ³΅λ¬Έμ„ λŒ€κ΄„ν˜Έ μ•ˆμ— μ“΄λ‹€.

반볡문 μ•žμ— λ³€μˆ˜λ§Œ μ“°λ©΄ λœλ‹€.

 

 

 

πŸ”Άλ°˜λ³΅λ¬Έ + 쑰건문 μ»΄ν”„λ¦¬ν—¨μ…˜

 

 

ν˜•νƒœ

[ x for x in range(1, 11) if x % 2 == 0 ]

 

반볡문 뒀에 쑰건문을 써쀀닀.

 

 

 

πŸ”Ά 쀑볡 ν‘œν˜„κ³Ό μ»΄ν”„λ¦¬ν—¨μ…˜

# forλ¬Έ 쀑볡
sweetie = ['μ•„μ΄μŠ€ν¬λ¦Ό', '크림빡', '저리']
savory = ['감자칩', '팝콘', 'λΏŒμ…”λΏŒμ…”'] 

[[x, y] for x in sweetie for y in savory]
# ifλ¬Έ 쀑볡
[x for x in range(1, 30) if x % 2 == 0 if x % 3 == 0]

 

μ»΄ν”„λ¦¬ν—¨μ…˜ μ•ˆμ— forλ¬Έκ³Ό if문을 μ€‘λ³΅ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

 


μ…‹ μ»΄ν”„λ¦¬ν—¨μ…˜ & λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜

리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜μ€ λ‹€λ₯Έ μžλ£Œν˜•μœΌλ‘œλ„ ν™•μž₯될 수 μžˆλ‹€.

 

 

πŸ”Ά μ…‹ μ»΄ν”„λ¦¬ν—¨μ…˜

# set μ»΄ν”„λ¦¬ν—¨μ…˜μ„ λ§Œλ“œλŠ” 방법
# λŒ€κ΄„ν˜Έ λŒ€μ‹ μ— μ€‘κ΄„ν˜Έ μ‚¬μš©
{x for x in range(0, 11, 2)}
{0, 2, 4, 6, 8, 10}

 

 

 

 

πŸ”Ά λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜

# {λ‚˜ν΄λ¦¬ μ„ μˆ˜ 번호:이름} λ”•μ…”λ„ˆλ¦¬
napoli_num = [3, 77, 9, 99]
napoli_player = ['minjae', '크바라츠헬리아', 'Osimhen', 'Anguissa'] 
{k:v for k, v in zip(napoli_num, napoli_player)}

# λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜ with ifλ¬Έ
{k:v for k, v in zip(napoli_num, napoli_player) if k < 50}

zip()ν•¨μˆ˜λ₯Ό ν™œμš©ν•΄μ„œ key와 valueλ₯Ό μ§€μ •ν•˜λ©΄ λ”•μ…”λ„ˆλ¦¬λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

if문도 ν•¨κ»˜ μ“Έ 수 μžˆλ‹€.

 

 

 

 

 

 

 

λ°˜μ‘ν˜•