python的reduce、map、zip、filter方法解析

1、map方法:map(function, iterable, ...) iterable:一个或多个序列

map()是python的内置方法,会根据提供的函数对指定序列做映射。返回一个迭代器

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

In [44]: list(map(str.upper,['abcd']))
Out[44]: ['ABCD']

In [45]: for i in map(str.upper,['abc']):
    ...:     print(i)
    ...:
ABC

In [46]: list(map(lambda x:x*2, [1,2,3,4]))
Out[46]: [2, 4, 6, 8]

In [47]: list(map(lambda x,y:x+y, [1,2,3],[4,5,6]))  #传入2个iterable对象
Out[47]: [5, 7, 9]

In [48]: list(map(lambda x,y:x+y, [1,2,3],[4,5,6,7]))    #只会比配最短的序列,最短序列处理玩及处理完成
Out[48]: [5, 7, 9]

 

2、zip()方法:

zip([iterable....]):参数为一个或多个可迭代对象

函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

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

In [49]: list(zip([1,2,3]))
Out[49]: [(1,), (2,), (3,)]

In [50]: list(zip([1,2,3],[12,13,14]))   #多个参数
Out[50]: [(1, 12), (2, 13), (3, 14)]

In [51]: list(zip([1,2,3],[12,13,14],[23,24,25,26]))    #多个参数,参数数量不一致
Out[51]: [(1, 12, 23), (2, 13, 24), (3, 14, 25)]

In [63]: l = list(zip([1,2,3],[12,13,14]))

In [64]: l
Out[64]: [(1, 12), (2, 13), (3, 14)]

In [65]: list(zip(*l))       #对已经zip过的对象,使用*会进行zip的求反
Out[65]: [(1, 2, 3), (12, 13, 14)]

In [67]: a,b = list(zip(*l))      #可以将反zip对象分别赋值给几个对象,对象数需要一致。

In [68]: a
Out[68]: (1, 2, 3)

In [69]: b
Out[69]: (12, 13, 14)

In [79]: list(zip(*zip([1,2,3],[11,12,13])))
Out[79]: [(1, 2, 3), (11, 12, 13)]

In [88]: a ,b = zip(*zip([1,2,3],[11,12,13]))

In [89]: a
Out[89]: (1, 2, 3)

In [90]: b
Out[90]: (11, 12, 13)

 

3、filter(function, iterable)

过滤序列,过滤掉不符合条件的序列元素。序列的每一个元素作为第一个函数的参数,进行判断,返回True 或False,最后返回True的元素放到一个新的列表中。

math.sqrt()开根号的方法。math.sqrt(x)%1 == 0 可以完全开根号。

In [99]: list(filter(lambda x:math.sqrt(x)%1 == 0,[1,2,3,4,5,6,7,8,9]))
Out[99]: [1, 4, 9]

4、reduce(function, iterable[, initializer])

reduce是在functtools模块中,所以需要到处functools模块

对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

  • function -- 函数,有两个参数
  • iterable -- 可迭代对象
  • initializer -- 可选,初始参数

In [105]: reduce(lambda x,y :x+y,[1,2,3,4,5])  #没有设定初始化值,则使用前两个为初始化值。
Out[105]: 15

In [106]: reduce(lambda x,y :x+y,[1,2,3,4,5], 5)
Out[106]: 20

# 5是初始值,也可以理解为第三个参数
# 计算呢过程
-->5+1=6
-->6+2=8
-->8+3=11
-->11+4=15
-->15+5=20

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值