Python Basic 17 | 람다 표현식 사용하기

devheyrin·2022년 1월 10일
0

python basic

목록 보기
17/19

람다 표현식으로 함수 만들기

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는 사용할 수 없다.

map에 객체를 여러 개 넣기

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 사용하기

일반 함수

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 사용하기

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))
  • 결과 1 2
    3 3
    6 4
    10 5
    15
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)))
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글