写点什么

滚雪球学 Python 之内置函数:filter、map、reduce、zip、enumerate

发布于: 2021 年 03 月 10 日
滚雪球学 Python 之内置函数:filter、map、reduce、zip、enumerate

橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic


已完成的文章清单


  1. 滚雪球学 Python 第二轮开启,进阶之路,列表与元组那些事儿

  2. 说完列表说字典,说完字典说集合,滚雪球学 Python

  3. 关于 Python 中的字符串,我在补充两点,滚雪球学 Python

  4. 列表推导式与字典推导式,滚雪球学 Python

  5. 滚雪球学 Python 之 lambda 表达式


六、filter、map、reduce、zip、enumerate


这几个函数在 Python 里面被称为高阶函数,本文主要学习它们的用法。


6.1 filter


filter 函数原型如下:


filter(function or None, iterable) --> filter object
复制代码


第一个参数是判断函数(返回结果需要是 True 或者 False),第二个为序列,该函数将对 iterable 序列依次执行 function(item) 操作,返回结果是过滤之后结果组成的序列。

简单记忆:对序列中的元素进行筛选,获取符合条件的序列。


my_list = [1, 2, 3]my_new_list = filter(lambda x: x > 2, my_list)print(my_new_list)
复制代码


返回结果为:<filter object at 0x0000000001DC4F98>,使用 list 函数可以输入序列内容。


6.2 map


map 函数原型如下:


map(func, *iterables) --> map object
复制代码


该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列;

下述代码是一个简单的测试案例:


my_list = [-1,2,-3]my_new_list = map(abs,my_list)print(my_new_list)
复制代码


上述代码运行完毕,得到的结果是:<map object at 0x0000000002860390>。使用 print(list(my_new_list)) 可以得到结果。


map 函数的第一个参数,可以有多个参数,当这种情况出现后,后面的第二个参数需要是多个序列。


def fun(x, y):    return x+y# fun 函数有2个参数,故需要两个序列my_new_list = map(fun, [1, 2, 3], [4, 4, 4])print(my_new_list)print(list(my_new_list))
复制代码


map 函数解决的问题:


  1. 使用 map 函数,不需要创建一个空列表;

  2. 调用函数的时候,不需要带括号了,map 函数会自动调用目标函数;

  3. map 函数会自动匹配序列中的所有元素。


6.3 reduce


reduce 函数原型如下:


reduce(function, sequence[, initial]) -> value
复制代码


第一个参数是函数,第二个参数是序列,返回计算结果之后的值。该函数价值在于滚动计算应用于列表中的连续值。

测试代码如下:


from functools import reducemy_list = [1, 2, 3]
def add(x, y): return x+y
my_new_list = reduce(add, my_list)print(my_list)print(my_new_list)
复制代码


最终的结果是 6,如果设置第三个参数为 4,可以运行代码查看结果,最后得到的结论是,第三个参数表示初始值,即累加操作初始的数值。


my_new_list = reduce(add, my_list,4)print(my_list)print(my_new_list)
复制代码


简单记忆:对序列内所有元素进行累计操作。


6.4 zip


zip 函数原型如下:


zip(iter1 [,iter2 [...]]) --> zip object
复制代码


zip 函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一样,则返回列表长度与最短的对象相同,利用星号(*)操作符,可以将元组解压为列表。

测试代码如下:

my_list1 = [1,2,3]my_list2 = ["a","b","c"]print(zip(my_list1,my_list2))print(list(zip(my_list1,my_list2)))````
展示如何利用 `*` 操作符:
```pythonmy_list = [(1, 'a'), (2, 'b'), (3, 'c')]print(zip(*my_list))print(list(zip(*my_list)))
复制代码


输出结果如下:


<zip object at 0x0000000002844788>[(1, 2, 3), ('a', 'b', 'c')]
复制代码


简单记忆:zip 的功能是映射多个容器的相似索引,可以方便用于来构造字典。


6.5 enumerate


enumerate 函数原型如下:


enumerate(iterable, start=0)
复制代码


参数说明:


  • sequence:一个序列、迭代器或其他支持迭代对象;

  • start:下标起始位置。


该函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

测试代码如下:


weekdays = ['Mon', 'Tus', 'Wen', 'Thir']print(enumerate(weekdays))print(list(enumerate(weekdays)))
复制代码


返回结果为:<enumerate object at 0x0000000002803AB0>


6.6 这篇博客的总结


本文涉及的函数可以与 lambda 表达式进行结合,能大幅度提高编码效率。最好的学习资料永远是 官方手册


相关阅读


  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧

  2. Python 爬虫小课,精彩 9 讲




博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。


发布于: 2021 年 03 月 10 日阅读数: 12
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
滚雪球学 Python 之内置函数:filter、map、reduce、zip、enumerate