专业编程基础技术教程

网站首页 > 基础教程 正文

python基础知识分享:zip()、filter函数和reduce如何使用?

ccvgpt 2024-08-06 12:39:01 基础教程 8 ℃

喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦!

zip()函数

python基础知识分享:zip()、filter函数和reduce如何使用?

可以从一个或多个可迭代对象中并行取出元素进行并行的迭代。它也是返回自身的迭代器。

例如:

之所以能并行迭代多个可迭代对象,是因为它同时标记多个可迭代对象的迭代位置。如果zip的多个可迭代对象的长度不同,则以最短的长度为标准,因为zip最多只能标记到最短长度的迭代位置。

因为zip返回的是迭代器,所以可以使用迭代工具去操作zip的结果:

zip常用于构建dict,因为它并行从多个迭代对象中取数据:

需要注意的是,zip可以从任意可迭代对象中取元素,而集合/字典中的元素顺序是不定的,所以并行取出来的顺序可能不像想象中在位置上那般一一对应。

filter

Python中的filter函数类似于Perl中的grep,用于从可迭代对象中筛选出元素被函数操作后为True的元素。

filter(function or None, iterable) --> filter object

例如,筛选出列表中字符串元素长度大于2的字符串:

上面的工作过程是迭代列表L,每取一个元素都放进函数中操作一番,如果这个元素放进函数中使得函数返回真,则保留这个元素,否则丢弃这个元素。

如果filter的函数部分为None,则表示直接从可迭代对象中取出元素为True的元素:

filter的返回结果是一个可迭代对象,可以进行迭代操作:

reduce

reduce的功能非常好用,看下面的示例:

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

它的语法为:

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

reduce有两个过程:

  1. 先从sequence中取两个元素作为func的参数,该函数返回一个结果A。这是初始化的过程
  2. 将结果A与sequence的下一个元素作为func的参数,继续返回一个结果B,将结果B与下一个元素作为func参数,依次类推,直到迭代完sequence中所有元素

如果给reduce设置了initial参数,则跳过初始化的过程,直接将Initial与sequence的第一个元素作为func的参数。如果没有给定sequence,而给了Initial,则initial作为直接返回的默认值。

例如,从序列中取出最大值:

1 >>> reduce( lambda x, y: x if x > y else y, [1,2,3,4,5] )
2 5
3
4 >>> reduce( lambda x, y: x if x>y else y, [1,2,3,4,5],10 )
5 10

觉得文章还不错的话不妨收藏起来慢慢看,有任何建议或看法欢迎大家在评论区分享讨论!

我是一名python开发工程师,整理了一套python的学习资料,如果你想提升自己,对编程感兴趣,关注我并在后台私信小编:“08”即可免费领取资料!希望对你能有所帮助!

最近发表
标签列表