lambda 매개변수들: 식(반환값)
plus_ten = lambda x: x + 10
print(plus_ten(1)) # 11
# 람다 표현식 자체를 호출하기
print((lambda x: x + 10)(1)) # 11
람다 표현식 안에서는 새 변수를 만들 수 없다. 변수가 필요한 코드일 경우에는 def 로 함수를 만들자.
단, 람다 표현식 밖에 있는 변수는 사용할 수 있다.
y = 10
print((lambda x: x+y)(2)) # 12
람다 표현식은 함수를 다른 함수의 인수로 넣을 때 유용하다.
a = list(map(lambda x: x+10, [1,2,3]))
print(a) # [11, 12, 13]
print((lambda : 1)()) # 1
x = 10
print((lambda : x)()) # 10
lambda 매개변수들: 식(반환값)1 if 조건식 else 식(반환값)2
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = list(map(lambda x: str(x) if x % 3 == 0 else x, a))
print(result) # [1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
요소가 3의 배수일 때는 요소를 문자열로 만들어서 반환하고, 3의 배수가 아닐 때는 요소를 그대로 반환한다.
람다 표현식에서 if를 사용했다면 반드시 else를 사용해야 한다.
람다 표현식에서 elif는 사용할 수 없다.
a = [1, 2, 3, 4, 5]
b = [2, 4, 6, 8, 10]
map_list = list(map(lambda x, y: x * y, a, b))
print(map_list) # [2, 8, 18, 32, 50]
filter 함수 수행 결과 참인 요소만 가져오고 거짓인 요소는 버림.
def f(x):
return x > 5 and x < 10
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
print(list(filter(f, a))) # [8, 7, 9]
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
print(list(filter(lambda x: 5 < x < 10, a))) # [8, 7, 9]
reduce 는 반복가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수이다.
from functools import reduce
def f(x, y):
print(x, y)
return x + y
a = [1, 2, 3, 4, 5]
print(reduce(f, a))
from functools import reduce
a = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x + y, a)) # 15
표준 입력으로 숫자.확장자 형식으로 된 파일 이름 여러 개가 입력됩니다. 다음 소스 코드를 완성하여 파일 이름이 숫자 3개이면서 앞에 0이 들어가는 형식으로 출력되게 만드세요. 예를 들어 1.png는 001.png, 99.docx는 099.docx, 100.xlsx는 100.xlsx처럼 출력되어야 합니다. 그리고 람다 표현식을 사용해야 하며 출력 결과는 리스트 형태라야 합니다. 람다 표현식에서 파일명을 처리할 때는 문자열 포매팅과 문자열 메서드를 활용하세요.
1.jpg 10.png 11.png 2.jpg 3.png
['001.jpg', '010.png', '011.png', '002.jpg', '003.png']
files = input().split()
# 내 풀이
print(list(map(lambda x: '0'*(3-len(x.split('.')[0]))+x, files)))
# 코딩도장 풀이
print(list(map(lambda x: '{0:03d}.{1}'.format(int(x.split('.')[0]), x.split('.')[1]), files)))