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

举报
梦想橡皮擦 发表于 2021/05/26 14:33:00 2021/05/26
【摘要】 橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic。 滚雪球学 Python 第二轮 已完成的文章清单 六、filter、map、reduce、zip、enumerate6.1 filter6.2 map6.3 reduce6.4 zip6.5 enumerate6.6 这篇博客的总结 已完成的文章...

橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 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

  
 
  • 1

第一个参数是判断函数(返回结果需要是 True 或者 False),第二个为序列,该函数将对 iterable 序列依次执行 function(item) 操作,返回结果是过滤之后结果组成的序列。
简单记忆:对序列中的元素进行筛选,获取符合条件的序列。

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

  
 
  • 1
  • 2
  • 3

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

6.2 map

map 函数原型如下:

map(func, *iterables) --> map object

  
 
  • 1

该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列;
下述代码是一个简单的测试案例:

my_list = [-1,2,-3]
my_new_list = map(abs,my_list)
print(my_new_list)

  
 
  • 1
  • 2
  • 3

上述代码运行完毕,得到的结果是:<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))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

map 函数解决的问题:

  1. 使用 map 函数,不需要创建一个空列表;
  2. 调用函数的时候,不需要带括号了,map 函数会自动调用目标函数;
  3. map 函数会自动匹配序列中的所有元素。

6.3 reduce

reduce 函数原型如下:

reduce(function, sequence[, initial]) -> value

  
 
  • 1

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

from functools import reduce
my_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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

my_new_list = reduce(add, my_list,4)
print(my_list)
print(my_new_list)

  
 
  • 1
  • 2
  • 3

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

6.4 zip

zip 函数原型如下:

zip(iter1 [,iter2 [...]]) --> zip object

  
 
  • 1

zip 函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一样,则返回列表长度与最短的对象相同,利用星号(*)操作符,可以将元组解压为列表。
测试代码如下:

my_list1 = [1,2,3]
my_list2 = ["a","b","c"]
print(zip(my_list1,my_list2))
print(list(zip(my_list1,my_list2)))

  
 
  • 1
  • 2
  • 3
  • 4

展示如何利用 * 操作符:

my_list = [(1, 'a'), (2, 'b'), (3, 'c')]
print(zip(*my_list))
print(list(zip(*my_list)))

  
 
  • 1
  • 2
  • 3

输出结果如下:

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

  
 
  • 1
  • 2

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

6.5 enumerate

enumerate 函数原型如下:

enumerate(iterable, start=0)

  
 
  • 1

参数说明:

  • sequence:一个序列、迭代器或其他支持迭代对象;
  • start:下标起始位置。

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

weekdays = ['Mon', 'Tus', 'Wen', 'Thir']
print(enumerate(weekdays))
print(list(enumerate(weekdays)))

  
 
  • 1
  • 2
  • 3

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

6.6 这篇博客的总结

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

相关阅读

  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  2. Python 爬虫小课,精彩 9 讲

今天是持续写作的第 102 / 200 天。
如果你想跟博主建立亲密关系,可以关注同名公众号 梦想橡皮擦,近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家点赞评论收藏

文章来源: dream.blog.csdn.net,作者:梦想橡皮擦,版权归原作者所有,如需转载,请联系作者。

原文链接:dream.blog.csdn.net/article/details/114413686

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。