1. filter(function, iterable)

过滤器,过滤掉不满足函数 function 的元素,重新返回一个新的迭代器。

其中 function 函数的第一个参数是可迭代对象 iterable 中的一个元素,也就是说函数 function 依次接收 iterable 可迭代对象的每一个元素,并判断每一个元素是否符合 function 的条件。

In [29]: a = [1,2,3,4,5]In [30]: def fun(a):...:     ret = []...:     if a > 3:...:        ret.append(a)...:     return ret...:     In [31]: for i in filter(fun, a):...:     print(i)...:
4
5In [32]: list(filter(fun, a))
Out[32]: [4, 5]

2. map(function, iterable, …)

它将 function 映射于 iterable 中的每一项,并返回一个新的迭代器。

In [33]: a = [1,2,3,4,5]In [34]: map(lambda x: x*2, a)
Out[34]: <map at 0x843d400>In [35]: ret = map(lambda x: x*2, a)In [37]: list(ret)
Out[37]: [2, 4, 6, 8, 10]

同时我们, map 函数支持传入多个可迭代对象。当传入多个可迭代对象时,输出元素个数等于较短序列长度。

如下,传入两个列表, function 就需要接受两个参数,取值分别对应第一、第二个列表中的元素。找到同时满足第一个列表的元素为奇数,第二个列表对应位置的元素为偶数的元素。

In [38]: xy = map(lambda x,y: x%2==1 and y%2==0, [1,3,2,4,1],[3,2,1,2])In [39]: for i in xy:...:     print(i)...:
False
True
False
False
In [40]: a = [1,2,3,4,5]In [41]: b = [10,11]In [42]: ret = map(lambda i,j: i+j, a, b)In [43]: list(ret)
Out[43]: [11, 13]

3. reduce(function, iterable[, initializer])

reduce 函数在 Python 3 中位于 functools 模块中,使用前需要先导入。

reduce 函数中第一个参数是函数 functionfunction 函数,参数个数必须为 2,是可迭代对象 iterable 内的连续两项。它的计算过程是依次将 iterable 2 个元素为单位传递给 function

In [45]: from functools import reduceIn [46]: reduce(lambda x,y: x+y,list(range(5)))
Out[46]: 10

即它的计算结果是 0+1+2+3+4=10

4. reversed(seq)

重新生成一个反向迭代器,对输入的序列实现反转。注意:它会返回一个新的迭代序列。

In [47]: a = [1,2,3,4,5]In [48]: ret = reversed(a)In [49]: ret
Out[49]: <list_reverseiterator at 0x8940f60>In [50]: list(ret)
Out[50]: [5, 4, 3, 2, 1]

5. sorted(iterable, *, key=None, reverse=False)

实现对可迭代对象的排序, key 参数和 reverse 参数必须为关键字参数,都可省略。

In [51]: a = [3,1,2,5,4]In [52]: ret = sorted(a, reverse=True)In [53]: ret
Out[53]: [5, 4, 3, 2, 1]In [54]: ret = sorted(a, reverse=False)In [55]: ret
Out[55]: [1, 2, 3, 4, 5]

可迭代对象的元素也是一个复合对象,如为字典。依据依据为字典键的值, sortedkey 函数就会被用到。

In [62]: d = [{'a':111, 'b':222, 'c':333}, {'a':11, 'b':22, 'c':33}, {'a':1, 'b':2, 'c':3}]In [63]: sorted(d,key=lambda x:x['a'])
Out[63]:
[{'a': 1, 'b': 2, 'c': 3},{'a': 11, 'b': 22, 'c': 33},{'a': 111, 'b': 222, 'c': 333}]

6. 迭代器函数 iter(object[, sentinel])

返回一个严格意义上的可迭代对象,其中,参数 sentinel 可有可无。

In [64]: a = [1,2,3]In [65]: ret = iter(a)In [66]: ret
Out[66]: <list_iterator at 0x7feba20>In [67]: ret.__next__()
Out[67]: 1In [68]: ret.__next__()
Out[68]: 2In [69]: ret.__next__()
Out[69]: 3In [70]: ret.__next__()
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-70-6685d4123b21> in <module>
----> 1 ret.__next__()StopIteration: In [71]: for i in ret:...:     print(i)...:     In [72]:

可以看到最后 for i in ret 中已经没有元素可进行迭代,所以 print(i) 不会有值再打印。

只要 iterable 对象支持可迭代协议,即自定义了 __iter__ 函数,便都能配合 for 依次迭代输出其元素。

In [73]: class Iter(object):...:     def __init__(self):...:         self._list = [1,2,3]...:     def __iter__(self):...:         print("enter __iter__")...:         return iter(self._list)...:         In [74]: m = Iter()In [77]: for i in m:...:     print(i)...:
enter __iter__
1
2
3In [78]:

如果在 Iter 类中不使用 iter(self._list) 则会有如下错误:

In [78]: class Iter(object):...:     def __init__(self):...:         self._list = [1,2,3]...:     def __iter__(self):...:         print("enter __iter__")...:         return self._list...:         In [79]: m = Iter()In [80]: for i in m:...:     print(i)...:
enter __iter__
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-80-9cd7b7f0b3b5> in <module>
----> 1 for i in m:2     print(i)3 TypeError: iter() returned non-iterator of type 'list'

Python 高阶函数filter、map、reduce、reversed、sorted及迭代器函数 iter相关推荐

  1. Python学习之Part09.高阶函数filter(),map(),reduce(),sorted()

    1.高阶函数 一个函数作为参数传给另外一个函数: 一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归) # abs()用来求一个数的绝对值 # 将abs函数赋值,则f==abs f = a ...

  2. Python内置函数filter, map, reduce

    filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当 ...

  3. python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...

    python有很多内置函数,内置函数封装了很多功能,让我们用起来很方便,小猿圈针对高阶函数有详细的讲解视频,朋友们可以去看看,小编学后总结了一下,下面说一下lambda.map和reduce高阶函数的 ...

  4. python高阶函数map_简单了解python高阶函数map/reduce

    高阶函数map/reduce Python内建了map()和reduce()函数. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每 ...

  5. python高阶函数filter_python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...

  6. Swift-高阶函数如map,reduce,filter的一些总结

    Swift 这个语言,速度快,更加安全,代码少,易于阅读维护. 所以一些高阶函数在项目实际使用中也是蛮方便的总结如下: 高阶函数的定义:一个函数如果可以以某个函数作为参数,或者返回值,那么这个函数就称 ...

  7. 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

    高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...

  8. python使用高阶函数实现_18.python高阶函数

    什么是高阶函数:一个函数可以作为参数传给另外一个函数(一个函数可以用来接收另一个函数作为参数),或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数.函数的形参位 ...

  9. Python基础(六)—函数式编程(内部函数、闭包、lambda、filter/map/reduce/sorce、偏函数)

    内部函数 Python中函数的作用域由def关键字界定,函数内的代码访问变量的方式是从其所在层级由内向外,若往外直至全局作用域都查找不到的话代码会抛异常. 主要看以下代码的差别~~ "&qu ...

  10. python高阶函数

    高阶函数,接收函数作为参数,或者将函数作为返回值的函数是高阶函数: 5个带key内置函数 filter/map(function, iterable) --> 迭代器 sorted(iterab ...

最新文章

  1. springBean生命周期----来自spring实战总结
  2. 数组运用_1-19 编程练习
  3. 【流量劫持】躲避 HSTS 的 HTTPS 劫持
  4. MessagePack:一种高效二进制序列化格式
  5. tesklink 管理员项目角色被修改后的解决方法
  6. Google推出Web开发利器:App Engine
  7. Android之自定义ContentProvider详解
  8. privoxy支持同时代理多少个_使用ssh隧道+privoxy实现Linux全局代理
  9. 关于 nohup 执行命令以后 需要再按回车才能起效的解决办法
  10. Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中...
  11. 一篇不大正经的关于数论的总结(未完
  12. Ayoa:让思维导图更简单,在线使用 无需安装客户端
  13. mysql语句中出现中文的情况下,在java程序中不会有结果,也不会报错.
  14. 快手视频大量下载无水印软件 怎样从快手下载无水印软件 说说如何在快手批量下载高清不含水印...
  15. badbody下_badboy下载_badboy测试工具2.0.5官方免费版 - 系统之家
  16. 关于一政网教育,考生们是如何看待的?
  17. 好产品是如何炼成的?
  18. cad打开卡死_求助,cad 一打开就卡死,完全没办法运行,怎么处理
  19. 【正则表达式验证邮箱】
  20. Android 机顶盒TV app开发

热门文章

  1. 2022-2028年中国乙烷行业投资分析及前景预测报告
  2. 2022-2028年中国公路客运行业市场研究及前瞻分析报告
  3. Docker compose 容器编排
  4. Pinia轻量级状态管理
  5. C++核心编程(三)
  6. 【SpringMVC】基本概念
  7. 理解 Word2Vec 之 Skip-Gram 模型
  8. LeetCode简单题之删除某些元素后的数组均值
  9. LeetCode简单题之相交链表
  10. 自动机器学习(AutoML)