본문 바로가기
  • hello world
Language/Python

[Python] 람다 표현식 Lambda Expression

by JJoajjoa 2023. 8. 21.

람다쥑

 

 

 

lambda

- 익명 함수를 생성하는 키워드

- 코드를 간단하게 만드는 데 사용

- 한줄로 표현하는 함수

# 람다 미사용
def add(x, y):
    return x+y
print(add(3, 4)) #7

 

# 람다 사용
add_lambda = lambda x,y: x+y
print(add_lambda(3, 4)) #7

>> add_lambda = lambda x, y: x+y

>> lambda: 키워드

>> x, y: 인자 (쉼표로 여러개 가능)

>> x+y: 인자 활용 수행 코드

→ 인자를 전달하면 인자활용수행코드를 수행한 후 결과를 바로 반환

 

 

람다식 바로 호출하기

print((lambda x: x**2) (3)) #9

>> (lambda 인자 : 인자활용수행코드) (인자)

 

 

람다식에서는 elif를 사용할 수 없음

a = [1,2,3,4,5,6,7,8,9,10]
print(list(map(lambda x: 0 if x%2 == 0 else 1 if x%3 == 0 else 2, a)))
#[2, 0, 1, 0, 2, 0, 2, 0, 1, 0]

lambda    x  :     0   if x%2 == 0   else    1   if x%3 == 0   else 2        , a

lambda 인자: 결과1 if 조건식1   else 결과2 if 조건식2   else 결과3

# [2, 0, 1, 0, 2, 0, 2, 0, 1, 0] : 결과 해석

x가 짝수면 0을 넣겠다 → 남은 애들 중에 3의배수가 있다면 1을 넣어줘 → 그게 아니면 2로 넣어줘

= 그래서 짝수 0이 먼저 다 채워진 형태

 

 

 

 

 

 

# map 함수 (파이썬 내장함수)

- 주어진 함수를 반복 가능(interable)한 객체의 각 원소에 적용하고, 결과를 반환하는 함수

> map(function, interable) → 원래 객체의 각 원소에 해당 함수를 적용한 결과

 

# 람다 미사용
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def f(x):
    if x%2 ==0 :
        return 0
    else:
        return x
print(list(map(f, a))) #[1, 0, 3, 0, 5, 0, 7, 0, 9, 0]
# 람다 사용
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(map(lambda x: 0 if x%2 ==0 else x, a))) #[1, 0, 3, 0, 5, 0, 7, 0, 9, 0]

 

예시

lst = [1, 2, 3, 4, 5]
square_list = map(lambda x: x*x, lst)
lst = list(square_list)
print(lst) #[1, 4, 9, 16, 25]

>> map (lambda x: x*x, lst)

 

 

 

 

 

 

# filter 함수 (파이썬 내장함수)

- 주어진 함수를 반복 가능(interable)한 객체의 결과가 참(True)인 원소들만 반환하는 함수

> filter(function, interable)

 

예시

lst = [1, 2, 3, 4, 5]
even_lst = filter(lambda x: x%2==0, lst)
print(even_lst) #<filter object at 0x0000021357F3B850>
print(list(even_lst)) #[2, 4]

filter (lambda x: x%2==0, lst)

 

 

 


 

 

 

# 실습

 

1. 60이상-합격, 50~60-대기, 50이하-불합격 리스트 만들기

numbers = [12, 32, 55, 12, 32, 4, 86, 50]
score_list = map(lambda x: "합격" if x>=60 else "불합격" if x<=50 else "대기", numbers)
print(list(score_list))
#['불합격', '불합격', '대기', '불합격', '불합격', '불합격', '합격', '불합격']

 

 

2. jpg파일만 골라 리스트 만들기

files = ["memo.txt", "1.jpg", "32.png", "23.jpg", "223.jpg"]
print(list(filter(lambda x: x.find(".jpg") != -1, files))) #['1.jpg', '23.jpg', '223.jpg']
files = ["memo.txt", "1.jpg", "32.png", "23.jpg", "223.jpg"]
print(list(filter(lambda x: '.jpg' in x, files))) #['1.jpg', '23.jpg', '223.jpg']
files = ["memo.txt", "1.jpg", "32.png", "23.jpg", "223.jpg"]
jpg_list = []
for i in files:
    if "jpg" in i:
        jpg_list.append(i)
print(jpg_list) #['1.jpg', '23.jpg', '223.jpg']
files = ["memo.txt", "1.jpg", "32.png", "23.jpg", "223.jpg"]
print(list(filter(lambda x: x[len(x)-4:] == ".jpg", files))) #['1.jpg', '23.jpg', '223.jpg']
files = ["memo.txt", "1.jpg", "32.png", "23.jpg", "223.jpg"]
lst = []
for i in files:
    for j in range(len(i)):  #i[j]: 한글자씩
        if i[j] == "." :
            if i[j+1:] == "jpg" :
                lst.append(i)
            break
print(lst)  #['1.jpg', '23.jpg', '223.jpg']

 

 

3. 리스트 세 개의 곱

lst1 = [1, 2, 3, 4, 5]
lst2 = [1, 3, 5, 7, 9]
lst3 = [2, 4, 8]
print(list(map(lambda x,y,z: x*y*z, lst1, lst2, lst3))) #[2, 24, 120]

 

 

4. 1부터 10까지의 제곱값 중 홀수만 출력

a = list(map(lambda x: x*x, range(1, 11)))
print(list(filter(lambda x: x%2==1, a))) #[1, 9, 25, 49, 81]

print(list(filter(lambda x: x%2==1, map(lambda x: x*x, range(1, 11))))) #[1, 9, 25, 49, 81]