람다쥑
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]
'Language > Python' 카테고리의 다른 글
[Python] 파일 입 · 출력, pickle 모듈 (0) | 2023.08.23 |
---|---|
[Python] 데코레이터(decorator) · 래퍼함수 · 일급객체 · 클로저(closure) (0) | 2023.08.23 |
[Python] 제어문 (컴프리핸션 Comprehension) + all · any 함수 (0) | 2023.08.18 |
[Python] 리스트(list) · 튜플(tuple) · range함수 · 슬라이스(slice) · 세트(set) · 딕셔너리(dictionary) (0) | 2023.08.16 |
[Python] 문자열 · 서식지정자 · format함수 (0) | 2023.08.16 |