lambda

함수를 한줄에 정의하고 사용만 한다.코드의 간결함 메모리의 절약

람다 함수는 정의와 동시에 사용할 수 있음

 

 

lambda  매개변수 : 리턴값

print((lambda x : x**2)(2))
4

제곱을 해주는 함수를 정의하고 바로 숫자 2를 넣어 리턴값을 돌려받음

 

lambda 매개변수 : 리턴값 if 조건 else 리턴값

nums = list(range(-4,4))
print(nums)
print(list(map(lambda x :  '양수' if x >= 0 else '음수',nums)))
[-4, -3, -2, -1, 0, 1, 2, 3]
['음수', '음수', '음수', '음수', '양수', '양수', '양수', '양수']

 

map

리스트데이터의 각 원소에 함수를 적용하고 싶을 때 사용

map(각원소에 적용할 함수, 리스트 )

각 과일이름의 길이를 리턴

fruits = ['사과','바나나','포도','파인애플','귤']
print(map(len,fruits))
print(list(map(len,fruits)))
<map object at 0x0000013FDE88A7C0>
[2, 3, 2, 4, 1]

맵 함수만 적용하면 맵형태의 객체가 리턴되므로

리스트형태로 명시적 형변환을 실시

names = ['이우현','이종수','이병군','김나명']
list(map(lambda x : x[-2:],names))
['우현', '종수', '병군', '나명']

람다함수를 이용도 가능

 

list_2 = [[1,23,4],[21,24624,12321],[4718,82,29,300],[32,365,33]]
print(list(map(sum,list_2)))
print([sum(i) for i in list_2 ])
[28, 36966, 5129, 430]
[28, 36966, 5129, 430]

리스트 컴프리헨션과 같은결과

 

import pandas as pd
print(series_)
print(series_.map(lambda x : x**2))
print(series_**2)
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64
0     0
1     1
2     4
3     9
4    16
5    25
6    36
7    49
8    64
9    81
dtype: int64
0     0
1     1
2     4
3     9
4    16
5    25
6    36
7    49
8    64
9    81
dtype: int64

판다스 시리즈객체에 대해도 적용가능

filter

리스트에서 질의한 부분이 참인 경우만 리턴하는 함수

map과 같이 list로 명시적형변환 필요

시리즈에는 x

print(list_)
print('-'*30)
print(series_)
print('-'*30)
print(list(filter(lambda x: x>2,list_)))
print('-'*30)
print(series_[series_ > 2])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
------------------------------
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64
------------------------------
[3, 4, 5, 6, 7, 8, 9]
------------------------------
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64

시리즈에는 인덱싱으로 적용

+ Recent posts