python3之 filter、map、reduce

前言

今天来讲讲这个filter、map、reduce这几个方法,为什么用这个呢?主要是解决一个问题,api中要根据不通的业务返回不用dict。比如:pc与app调用同一个api返回的字段是有区别的,主要是因为pc的业务与app业务模式稍微有点不用。这个时候就想到了filter。然后顺便都一起说一下map和reduce。

filter

filter()这个内置函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

定义如下:

filter(function, iterable)

有两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

现在有个逻辑,定义了一个dict来对api输出的字段控制。

arr=[('app','product','产品'),('pc','news','新闻'),('app','subject','专题')]
d=list(filter(lambda x:x[1] if x[0]=='app' else None,arr))
print(d)

定一个了一个列表这个列表实际上是一个描述:

tuple的内容说明(展示的平台,展示的字段,描述)比如上面的arr,表示的意思是app调用的话返回product–产品、subject–专题字段,pc调用的话返回news –新闻字段。

后期如果业务扩展的话,只需要扩展(增、删)arr即可。所以用filter来出来最好不过了。

map

map()会根据提供的函数对指定序列做映射。

map(function, iterable, …)

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

看下代码如下:

arr=[('app','product','产品'),('pc','news','新闻'),('app','subject','专题')]

b=[('app','xxxx','产品'),('pc','eeeee','新闻'),('app','gggg','专题')] 

f=map(lambda x,y:(x[1]+'your right',y[1]+'all right') ,arr,b)
print(list(f)) 

现在把arr和b这两个列表,合并成一个新的。说出结果如下:

《python3之 filter、map、reduce》
《python3之 filter、map、reduce》

注:前提是python3的环境,python2不再赘述

reduce

说一下这个reduce,再python3中移到了functools包中(python2的就不再说明了)

reduce()的使用方法形如reduce(function,iterable).它的形式和map()函数一样。不过参数function必须有两个参数

from functools import reduce
#tuple说明 (展示的平台,返回的内容,描述)
arr=[('app','product','产品'),('pc','news','新闻'),('app','subject','专题')] 

def ls(x,y):  
    return x[1]+y

d=reduce(lambda x,y:ls(x,y) ,arr)
print(d)

现在是把arr中三个tuple合成一个,结果如下:

《python3之 filter、map、reduce》
《python3之 filter、map、reduce》

    原文作者:oogou11
    原文地址: https://zhuanlan.zhihu.com/p/36605030
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞