-
[Python] Lambda 함수내일배움캠프/Python 2024. 7. 2. 21:33
코드카타를 풀고나서 다른 사람들의 풀이를 보면 특출하게 짧은 코드들이 눈에 띕니다.
그 코드들을 살펴보면 공통적으로 lambda라는 코드가 있습니다.
lambda가 뭘까요?
그리고 어떻게 사용해야할까요?
Lambda Lambda 함수?
lambda 함수는 사용자 정의 함수 def와 동일한 역할을 합니다.
함수에 이름을 부여하지 않고, 일회성 사용을 한다는 차이점이 있습니다.
다음의 코드들을 보면 lambda 함수가 어떤 것인지 감을 잡을 수 있습니다.
먼저 더하기를 사용자 정의 함수 def로 작성했을 때는
def add(a, b):
return a+b위의 코드와 같습니다.
add는 함수의 이름이고,
향후에 필요시 함수와 매개 변수 a, b를 입력하여 재활용할 수 있습니다.
한편 더하기를 lambda 함수로 작성하면
add = lambda a, b : a+b
위 코드처럼 한 줄로 간결하게 나타낼 수 있습니다.
lambda 함수를 주로 일회성으로 사용되나
변수 add에 담아서 재사용할 수 있습니다.
Lambda 함수 응용
1. lambda와 map을 함께 사용
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))위 식은 numbers라는 리스트에 담긴 요소들 각각에 lambda 함수를 적용해줍니다.
map함수는
map(function, iterable)
위와 같은 문법을 가지고 있습니다.
function에 lambda 함수를 작성해주고
iterable에 리스트나 튜플과 같이 반복 가능한 객체를 넣어줍니다.
결과값으로 리스트의 모든 요소를 제곱해서 리스트로 반환한
[1, 4, 9, 16, 25]를 얻을 수 있습니다.
2. 정렬에서 람다 함수 사용
람다 함수는 정렬의 매개변수에서 자주 사용됩니다.
tuples = [(1, 3), (2, 1), (4, 2)]
sorted_tuples = sorted(tuples, key=lambda x: x[1])sorted()는 tuples를 정렬하여 sorted_tuple에 값을 넣어줍니다.
sorted()의 내부에 key라는 매개변수가 있는데
이 매개변수를 통해 tuples를 어떻게 정렬할지 정할 수 있습니다.
key 매개변수에 len을 넣어주면
tuples를 길이 순으로 나열해줍니다.
만약 key 매개변수에 lambda x: x[1]을 넣어주면
tuples에 있는 요소의 2번째 문자를 기준으로 정렬해줍니다.
여기에서 조금 더 깊게 들어가보면
key 매개변수에 lambda x : (x[1], x)를 넣어줄 수 있습니다.
여기서 (x[1], x)는 튜플을 뜻하는 것이 아니라
x[1]을 기준으로 정렬하되 같은 문자가 있을 때는
x(문자 전체)를 기준으로 정렬하라는 뜻입니다.
위에서 lambda 함수를 다뤄봤습니다.
배운 내용을 바탕으로 다음의 문제를 풀어보는 건 어떨까요?
https://school.programmers.co.kr/learn/courses/30/lessons/12915
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제를 이틀동안 붙잡고 있었는데 안 풀려서
'리스트 요소의 n번째 문자를 기준으로 정렬하는 법'에 대해서 찾아보다가 발견하게 되었습니다.
파이썬에 관해 책을 읽었기 때문에
sort와 sorted 함수에 대해서 당연히 알고 있었는데
key 매개변수를 통해 정렬 방법을 정할 수 있다는 것을 처음 알게 되었습니다.
이미 내가 알고 있고 쉬운 함수라도 하더라도
내가 모르는 게 없는지 다시 한 번 살펴봐야겠다고 생각하게 되었습니다.
lambda 함수에 대해서 공부하는 계기가 되었고
간단한 식에서 lambda 함수를 잘 사용할 수 있다는 자신감이 생겼습니다.
'내일배움캠프 > Python' 카테고리의 다른 글
[Python] 파이썬 문제 해결 전략 (2) (0) 2024.07.10 [Python] 파이썬 문제 해결 전략 (1) (0) 2024.07.08 [Python] 행렬의 덧셈 (0) 2024.06.25 [Python] 단어 맞추기 게임 (1) 2024.06.19 [Python] 스파르타 자판기 (0) 2024.06.17