一、匿名函数lambda

lambda argument1,argument2,...argumentN :expression using arguments

1、lambda是一个表达式,而不是一个语句。

因为这一点,lambda可以出现在python语法不允许def出现的地方---例如,在一个列表常量中或者函数调用的参数中,此外,作为一个表达式,lambda返回一个值一个值(一个新的函数),可以选择性地值给一个变量名。相反,def语句总是得在头部将一个新的函数赋值给一个变量名,而不是将这个函数作为结果返回。

2、lambda 的主体是一个单个的表达式,而不是一个代码块。

lambda是一个为编写简单的函数设计的,而def用来处理更大的任务。

Example:

>>>f=lambda x,y,z: x+y+z

>>>f(2,3,4)

9

>>>x=(lambda a=”fee”,b=”fie”,c=”foe”: a+b+c)

>>>x(“wee”)

‘weefiefoe’

通常用lambda来编写跳转表,如下:

>>>L = [lambda x: x**2,

lambda x: x**3,

lambda x: x**4 ]

>>>for f in L:

print(f(2))

4

8

16

>>>print(L[0](3))

9

嵌套的lambda,如下:

>>>def action(x):

return (lambda y: x+y)

>>>act=action(99)

>>>act(2)

101

>>>action = (lambda x: (lambda y: x+y))

>>>act = action(99)

>>>act(2)

101

>>>((lambda x: (lambda y: x+y))(99))(2)

101

二、map函数

map(function, sequence[, sequence, ...]) -> iterator

通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个迭代器。

function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的迭代器。

返回可迭代对象,需要list调用来显示所有结果。

>>> list(map(lambda x:x+2, [1, 2, 3]))

[3, 4, 5]

>>>list(map(pow,[1,2,3],[2,3,4]))

[1,8,81]

三、filter函数

filter函数会对指定序列执行过滤操作。

filter函数的定义:

filter(function or None, sequence) ->iterator

filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包含调用结果为True的元素。

返回可迭代对象,需要list调用来显示所有结果。

>>>list(filter((lambda x: x>0),range(-5,5)))

[1,2,3,4]

>>>list(filter(None,range(-5,5)))

[-5, -4, -3, -2, -1, 1, 2, 3, 4]

若function为None,则会返回包含非空元素的迭代器。

四、reduce函数

reduce函数,reduce函数会对参数序列中元素进行累积。

reduce函数的定义:

functools.reduce(function, iterable[, initializer])  #python3中reduce是在functools模块中

function参数是一个有两个参数的函数,reduce依次从iterable中取一个元素,和上一次调用function的结果做参数再次调用function。

第一次调用function时,如果提供initial参数,会以iterable中的第一个元素和initial作为参数调用function,否则会以iterable中的前两个元素做参数调用function。

等价于:

def reduce(function, iterable, initializer=None):

it = iter(iterable)

if initializer is None:

value = next(it)

else:

value = initializer

for element in it:

value = function(value, element)

return value

>>> functools.reduce(lambda x, y:x+y, [1,2,3,4])

10

>>> functools.reduce(lambda x, y:x+y, [1,2,3,4], 10)

20

>>> functools.reduce(lambda x, y:x*y, [1,2,3,4])

24

如果没有initial参数,这么算:(((1+2)+3)+4)

如果有initial参数,这么算: ((((10+1)+2)+3)+4)

注意:function函数不能为None,function必须是有2个参数的函数。

五、zip函数

其中sorted()和zip()返回一个序列(列表)对象,reversed()、enumerate()返回一个迭代器(类似序列)

定义:zip([seql, ...])接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。

>>> list(zip([1,23,3],[213,45,2]))  #两个列表长度一致

[(1, 213), (23, 45), (3, 2)]

>>> list(zip([1,23,3],[213,45,2,34,54]))  #两个列表长度不一致,以短的为准

[(1, 213), (23, 45), (3, 2)]

zip一些应用:

>>> [ [ i for i in range(3*n+1,3*n+4) ] for n in range(3) ]

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

1、二维矩阵变换(矩阵的行列互换)

>>>a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>>[ [row[col] for row in a] for col in range(len(a[0]))]

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

>>>list(zip(*a))

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

>>> map(list,zip(*a))

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

2、*操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple

>>>>x=[1,2,3],y=['a','b','c']

>>>>zip(*zip(x,y))

[(1,2,3),('a','b','c')]

3、使用zip合并相邻的列表项

>>> a = [1, 2, 3, 4, 5, 6]

>>> list(zip(*([iter(a)] * 2)))

[(1, 2), (3, 4), (5, 6)]

>>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))

>>> list(group_adjacent(a, 3))

[(1, 2, 3), (4, 5, 6)]

>>> list(group_adjacent(a, 2))

[(1, 2), (3, 4), (5, 6)]

>>> list(group_adjacent(a, 1))

[(1,), (2,), (3,), (4,), (5,), (6,)]

>>> list(zip(a[::2], a[1::2]))

[(1, 2), (3, 4), (5, 6)]

>>> list(zip(a[::3], a[1::3], a[2::3]))

[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))

>>> list(group_adjacent(a, 3))

[(1, 2, 3), (4, 5, 6)]

>>> list(group_adjacent(a, 2))

[(1, 2), (3, 4), (5, 6)]

>>> list(group_adjacent(a, 1))

[(1,), (2,), (3,), (4,), (5,), (6,)]

4、使用zip和iterators生成滑动窗口 (n -grams)

>>> from itertools import islice

>>> def n_grams(a, n):

z = (islice(a, i, None) for i in range(n))

return zip(*z)

>>> a = [1, 2, 3, 4, 5, 6]

>>> list(n_grams(a, 3))

[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]

>>> list(n_grams(a, 2))

[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

>>>list(n_grams(a, 4))

[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

5、使用zip反转字典

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

>>> list(m.items())

[('a', 1), ('c', 3), ('b', 2), ('d', 4)]

>>> list(zip(m.values(), m.keys()))

[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]

>>>dict(zip(m.values(), m.keys()))

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

python几个重要的函数(lambda,filter,reduce,map,zip)的更多相关文章

  1. Python中Lambda, filter, reduce and map 的区别

    Lambda, filter, reduce and map Lambda Operator Some like it, others hate it and many are afraid of t ...

  2. Python学习(五)函数 —— 内置函数 lambda filter map reduce

    Python 内置函数 lambda.filter.map.reduce Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读. 下面对 Python 的 lambda.fil ...

  3. Python常用内置函数整理(lambda,reduce,zip,filter,map)

    匿名函数lambda lambda argument1,argument2,...argumentN :expression using arguments 1.lambda是一个表达式,而不是一个语 ...

  4. python进阶学习之匿名函数lambda

    定义: lambda 参数列表:return(表达式) 匿名函数的表达式,只允许有一个. 匿名函数一般用于较简单的情况. 实例1: 实例2,配合高阶函数filter()使用: filter()函数是  ...

  5. 『Python基础-14』匿名函数 `lambda`

    匿名函数和关键字lambda 匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数 在Python中,如果要声匿名函数,则需要使用lambda关键字 使用lambda声明的匿名函数能接收任何 ...

  6. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

  7. 内置函数: filter 和 map

    内置函数———filter和map filter filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表.接收两个参数,第一个为函数,第二个为序列,序列的每个元素作 ...

  8. JavaScript高阶函数之filter、map、reduce

    JavaScript高阶函数 filter(过滤) 用法: 用于过滤,就是把数组中的每个元素,使用回调函数func进行校验,回调函数func返回一个布尔值,将返回值为 true 的元素放入新数组 参数 ...

  9. python中的内置函数lambda map filter reduce

    p.p1 { margin: 0; font: 12px "Helvetica Neue" } p.p2 { margin: 0; font: 12px "Helveti ...

  10. Python 函数lambda(), filter(), map(), reduce()

    1 filter filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String ...

随机推荐

  1. Leetcode 686.重复叠加字符串匹配

    重复叠加字符串匹配 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd", ...

  2. HDU 4588 Count The Carries(数学统计)

    Description One day, Implus gets interested in binary addition and binary carry. He will transfer al ...

  3. linux tcpdump抓包,wireshark实时解析

    转自: http://www.freebuf.com/articles/wireless/6517.html   由于CentOS7上yum安装的wireshark对CoAP的解析支持不太完善,而我w ...

  4. 【Linux】如何设置Linux开机 ,默认进入图形界面或命令行界面?

    原创链接: https://blog.csdn.net/prophet10086/article/details/78501019 [7版本] 在root用户权限下: 查看当前启动模式 systemc ...

  5. [C/C++] 深拷贝和浅拷贝

    ·默认拷贝构造函数可以完成对象的数据成员值简单地复制-----浅拷贝 ·对象的数据资源是由指针指示的堆时,默认拷贝构造函数仅作指针值的复制,需要显式定义拷贝构造函数-----深拷贝 首先定义几个点: ...

  6. Delphi GetCurrentDir 获取当前文件夹

    //获取当前文件夹 GetCurrentDirvardir: string;begindir := GetCurrentDir;ShowMessage(dir); //C:\Documents and ...

  7. 机器学习基础知识笔记(一)-- 极大似然估计、高斯混合模型与EM算法

    似然函数 常说的概率是指给定参数后,预测即将发生的事件的可能性.拿硬币这个例子来说,我们已知一枚均匀硬币的正反面概率分别是0.5,要预测抛两次硬币,硬币都朝上的概率: H代表Head,表示头朝上 p( ...

  8. 浅析JavaScript的垃圾回收机制

    JavaScript语言是一门优秀的脚本语言.其中包含脚本语言的灵活性外还拥有许多高级语言的特性.例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation).通常我们使 ...

  9. 继承spring的validator接口,实现对数据的校验

    在org.springframework.validation这个包中提供了一些对数据校验的方法,其中Validator接口是其中的一个. 现在用Validator接口,完成对数据的校验. 第一步:先 ...

  10. jquery、zepto冲突

    <script type="text/javascript" src="js/jquery.min.js"></script> < ...