TIL-Python lambda
Lambda基本
単独で使用するのではなく、
map, reduce, filter
などに主に使用されます.もちろん落とせないリストも![注意]https://wikidocs.net/64,https://gorokke.tistory.com/38
ランダを使うと、defで簡単に作れる機能を1行^^使いやすくなります.
def hap(x, y):
return x + y
hap(10, 20)
# 30
hap('hi', 'hello')
# 'hihello'
このようにでは、lambdaを使用してすぐに1行の符号化を適用するにはどうすればいいのでしょうか.(lambda x, y:x+y)(10, 20)
output :30
(람다와 적용 식을 쓰고)(람다로 적용했으면 하는 값을 넣어준다)
ただし、次のコードは使用できません.不可能な場合でも参考に!lambda x, y:x+y
#<function __main__.<lambda>(x, y)>
lambda x, y:x+y, 10, 20
#(<function __main__.<lambda>(x, y)>, 10, 20)
lambda x, y:x+y, (10, 20)
#(<function __main__.<lambda>(x, y)>, (10, 20))
mapとともに書き込む
# map(함수, 리스트)
(lambda x: x ** 2, range(5))
output :(<function __main__.<lambda>(x)>, range(0, 5))
# 파이썬 2.x 버전에서만 가능한 출력
map(lambda x: x ** 2, range(5))
output : <map at 0x1c98790d640>
# 파이썬 2.x, 3.x 에서의 출력
list(map(lambda x: x ** 2, range(5)))
# 리스트로 range(5)를 받아서 0,1,2,3,4에 lambda식을 하나씩 적용한다.
output : [0, 1, 4, 9, 16]
mapとlambdaを再利用します.testlist = [40, 50, 60, 70, 80]
check_pass = (lambda x: 'pass' if x >= 70 else 'fail')(testlist)
print(check_pass, type(check_pass))
# output
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-c8f845a8bcf6> in <module>
----> 1 check_pass = (lambda x: 'pass' if x >= 70 else 'fail')(testlist)
2 print(check_pass, type(check_pass))
<ipython-input-16-c8f845a8bcf6> in <lambda>(x)
----> 1 check_pass = (lambda x: 'pass' if x >= 70 else 'fail')(testlist)
2 print(check_pass, type(check_pass))
TypeError: '>=' not supported between instances of 'list' and 'int'
これにより、次の変更によりコードを実行できます.# 가능
# testlist = [40, 50, 60, 70, 80]
check_pass = list(map(lambda x: 'pass' if x >= 70 else 'fail', testlist))
print(check_pass, type(check_pass))
output:['fail', 'fail', 'fail', 'pass', 'pass'] <class 'list'>
reduceとともに書き込み
# reduce(함수, 시퀀스)
# 시퀀스의 원소들을 누적적으로 함수에 적용한다
from functools import reduce
reduce(lambda x, y: x + y, [0,1,2,3,4])
output :10
文字列の使用reduce(lambda x, y: y + x, 'abc')
# ba의 결과 이후 그 다음 원소인 c를 더함
# 첫 번째 x, y = a, b >> 결과 'ba'
# 두 번째 x, y = ba, c >> 결과 'cba'
output:'cba'
フィルタとともに書き込む
# filter(함수, 리스트)
# 말 그대로 필터. lambda의 결과가 참인 값을 새로운 리스트로 반환
list(filter(lambda x: x < 5, range(10)))
output :[0, 1, 2, 3, 4]
# 짝수 돌려주는 filter(lambda()) 만들기
list(filter(lambda x: x % 2 == 0, range(10)))
output:[0, 2, 4, 6, 8]
# 홀수 돌려주는 filter(lambda()) 만들기
# 2로 나눈 나머지가 1 => 1은 True 값이다.(False는 0)
list(filter(lambda x: x % 2, range(10)))
output:[1, 3, 5, 7, 9]
Lambdaは多くのリファレンスリンクで学ぶことができますが、1つのpostingですべて整理する量が多すぎます.数が多いというより、lambdaで任意の数の値を出力できます.
学習したい場合は、文字列、リスト、チュートリアルなどを自分で追加し、
if문
とコードを作成し、これらの方法を熟知する必要があります.Reference
この問題について(TIL-Python lambda), 我々は、より多くの情報をここで見つけました https://velog.io/@songgplant/TIL-파이썬-lambdaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol