首发于DataCode
python中lambda,map,filter函数

python中lambda,map,filter函数

lambda

有时候函数很简短,不需要单独def定义一个函数,可以使用lambda语句产生一个匿名函数,可以作业另外一个函数的参数,或者直接在apply,map中使用。
匿名函数定义如下:
my_f = lambda x:fun(x)
其中fun(x)是x的表达式。

下面是使用匿名函数的一个例子。

a = [1,2,3]def f_sum_list(a_list,func):
    a_sum = 0
    for i in a_list:
        a_sum += func(i)    return a_sum

print(f_sum_list(a,lambda x:x**2)) #求平方和print(f_sum_list(a,lambda x:x**3)) #求立方和
14
36

lambda函数还有一个用处是产生复合函数。比如产生一个二次多项式函数:

f = a*x*x + b+*x +c

我们当然可以这样定义:

def f(a,b,c,x):
    return a*x*x + b+*x +c

但是这里的a,b,c系数和x的作用是不一样的,改变频率可能比x低很多。

这是可以通过lambda函数创建如下形式:

def f(a,b,c):
    return lambda x:a*x*x+ b*x + c

f1 = f(1,-1,2)

print(f1(5))

输出为22.

map

map使用形式如:
map(function, iterable)
map是python中内置函数,传入一个函数,和可迭代对象作业参数。让函数一次作用于可迭代对象的每个值。

a = [1,2,3,4]
print(map(lambda x:x**2, a))

python3版本只会输入如下形式:

<map object at 0x0000000005E11FD0>

python2版本可以正常输出返回的列表。
python3版本可以通过转换成list输出完成的列表。

print(list(map(lambda x:x**2, a)))
[1, 4, 9, 16]

map中的函数可以接收多个函数,下面是一个传入多个参数的示例:

a = [1,2,3]
b = [1,2,3]
a_pow_b = map(pow,a,b)
print(list(a_pow_b))
[1, 4, 27]

apply,applymap和map的类似,可以通过传入函数和迭代对象进行计算。

它们的区别如下:

  • apply 用在dataframe上,用于对row或者column进行计算;
  • applymap 用于dataframe上,是元素级别的操作;
  • map (其实是python自带的)用于series上,是元素级别的操作。

filter

filter是python内置函数,使用格式为:
filter(function,iterable
接收一个函数,和一个可迭代对象。这里的函数产生布尔值,常用lambda匿名函数。将布尔值为真的对象过来处理。
使用实例如下:将大于5的元素过滤出来。

a = [1,2,3,5,6,7,8,9]
filter_list = filter(lambda x:x>5,a)
print(list(filter_list))
[6, 7, 8, 9]




个人微信公众号:DataCode

发布于 2018-08-15

文章被以下专栏收录