喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦!
zip()函数
可以从一个或多个可迭代对象中并行取出元素进行并行的迭代。它也是返回自身的迭代器。
例如:
之所以能并行迭代多个可迭代对象,是因为它同时标记多个可迭代对象的迭代位置。如果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有两个过程:
- 先从sequence中取两个元素作为func的参数,该函数返回一个结果A。这是初始化的过程
- 将结果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”即可免费领取资料!希望对你能有所帮助!