개발하고 싶어요
람다 표현식 본문
람다 표현식¶
람다 표현식으로 함수 만들기¶
In [18]:
plus_ten = lambda x: x + 10
plus_ten(5)
Out[18]:
15
람다 표현식 자체를 호출¶
In [19]:
(lambda x: x + 10)(1)
Out[19]:
11
람다 표현식 안에서 변수를 만들 수 없다¶
In [20]:
(lambda x:y = 10; x + y)(1)
Cell In[20], line 1
(lambda x:y = 10; x + y)(1)
^
SyntaxError: invalid syntax
In [21]:
y = 10
(lambda x : x + y)(1)
Out[21]:
11
In [23]:
(lambda x, y : x + y)(1,10)
Out[23]:
11
람다 표현식을 인수로 사용하기¶
In [24]:
def plus_ten(x):
return x + 10
list(map(plus_ten, [1, 2, 3]))
Out[24]:
[11, 12, 13]
In [26]:
list(map(lambda x : x + 10, [1, 2, 3]))
Out[26]:
[11, 12, 13]
In [29]:
(lambda : 1)()
Out[29]:
1
In [30]:
x = 10
(lambda : x)()
Out[30]:
10
람다 표현식과 map, filter, reduce 함수 사용¶
람다 표현식에 조건부 표현식 사용¶
lambda 매개변수 : 식1 if 조건식 else 식2
In [33]:
# 리스트에서 3의 배수를 문자열로 변환
lst = list(range(1, 11))
list(map(lambda x : str(x) if x % 3 == 0 else x, lst))
Out[33]:
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
In [37]:
# 위 lambda를 for, if문으로 변경
lst = list(range(1, 11))
for i in range(len(lst)):
if lst[i] % 3 == 0:
lst[i] = str(lst[i])
else:
continue
print(lst)
# lst = list(range(1, 11))
# for ind, val in enumerate(lst):
# if val % 3 == 0:
# lst[ind] = str(val)
# else:
# continue
# print(lst)
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
In [39]:
# 1은 문자열, 2는 실수로 변환, 3이상은 10을 더하기
lst = list(range(1, 11))
list(map(lambda x : str(x) if x == 1 else float(x) if x == 2 else x + 10, lst))
Out[39]:
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
In [42]:
# 위 lambda 식을 for, if, elif, else로 변경
lst = list(range(1, 11))
for ind, val in enumerate(lst):
if val == 1:
lst[ind] = str(val)
elif val == 2:
lst[ind] = float(val)
elif val >= 3:
lst[ind] = val + 10
print(lst)
# def f(x):
# if x == 1:
# return str(x)
# elif x == 2:
# return float(x)
# else:
# return x + 10
# list(map(f, lst))
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
map에 객체를 여러 개 넣기¶
In [44]:
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 3, 4, 5, 10, 11]
list(map(lambda x, y : x * y,lst1, lst2 ))
Out[44]:
[2, 6, 12, 20, 50]
filter 사용하기¶
In [47]:
# 함수를 사용해서 5보다 크면서 10보다 작은 숫자 가져오기
lst = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
def f(x):
return x > 5 and x < 10
list(filter(f, lst))
Out[47]:
[8, 7, 9]
In [48]:
lst = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(lambda x : x > 5 and x < 10, lst))
Out[48]:
[8, 7, 9]
In [65]:
lst = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
[i for i in lst if i > 5 and i < 10]
Out[65]:
[8, 7, 9]
reduce 사용하기¶
In [60]:
from functools import reduce
def f(x, y):
return x + y
lst = [1, 2, 3, 4, 5]
reduce(f, lst)
Out[60]:
15
In [63]:
from functools import reduce
lst = [1, 2, 3, 4, 5]
reduce(lambda x, y: x + y, lst)
Out[63]:
15
In [70]:
lst = [1, 2, 3, 4, 5, 6, 7]
x = 0
for i in lst:
x += i
print(x)
28
In [68]:
lst = [1, 2, 3, 4, 5, 6]
result = 0
i = 0
while i < len(lst):
result += lst[i]
i += 1
print(result)
21
연습문제 : 이미지 파일만 가져오기¶
다음 소스 코드를 완성하여 확장자가 .jpg, .png인 이미지 파일만 출력되게 만드세요. 여기서 람다 표현식을 사용하야 하며, 출력 결과는 리스트 형태야 합니다. 람다 표현식에서 확장자를 검사할 때는 문자열 메서드를 활용하세요.
In [72]:
files = ['font', '1.png', '10.jpg', '11.gif', '2.jpg', '3.png', 'table.xslx', 'spec.docx']
print(list(filter(lambda x : x.find('.jpg') != -1 or x.find('.png') != -1, files)))
['1.png', '10.jpg', '2.jpg', '3.png']
심사문제 : 파일 이름을 한꺼번에 바꾸기¶
표준 입력으로 숫자.확장자 형식으로 된 파일 이름 여러 개가 입력됩니다. 다음 소스 코드를 완성하여 파일 이름이 숫자 3개이면서 앞에 0이 들어가는 형식으로 출력되게 만드세요. 예를 들어 1.png는 001.png처럼 출력되어야 합니다. 그리고 람다 표현식을 사용해야 하며 출력 결과는 리스트 형태야 합니다. 람다 표현식에서 파일명을 처리할 때는 문자열 포매팅과 문자열 메서드를 활용하세요.
In [90]:
filst = input().split()
print(list(map(lambda x : '{0:03d}'.format(int(x.split('.')[0])) + '.' + x.split('.')[1], filst)))
1.png 99.docx 100.xlsx
['001.png', '099.docx', '100.xlsx']
'PYTHON' 카테고리의 다른 글
범죄데이터 분석 & 시각화 (0) | 2024.01.21 |
---|---|
global (1) | 2023.12.27 |
함수 - 재귀호출 (0) | 2023.12.27 |
함수 - 기본 개념, 위치 인수와 키워드 인수 (0) | 2023.12.27 |
파일 사용하기 (1) | 2023.12.26 |