python之map和reduce的区别以及zip使用

时间:2022-04-24 20:25:49

①从参数方面来讲:

map()函数:

map()包含两个参数,第一个参数是一个函数,第二个序列(列表或元组其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数

reduce()函数:

reduce() 第一个参数是函数,第二个是 序列(列表或元组)。但是,其函数必须接收两个参数


②从对传进去的数值作用来讲:

map()是将传的函数依次作用到序列的每个元素,每个元素都是独自被函数“作用”一次;(请看下面的栗子)

reduce()是将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算),

最终结果是所有的元素相互作用的结果。(请看下面的栗子)


举个栗子:

map()函数:

[python]  view plain  copy
  1. # 传入一个参数  
  2. def one_p(x):  
  3.     return x * x  
  4. print 'map1.1:', map(one_p, range(15))   
  5. #结果:map1.1: [1, 4, 9, 16]  
  6. print 'map1.2:', map(one_p, [123456])  
  7. #结果:map1.2: [1, 4, 9, 16, 25, 36]  
  8.   
  9. # 传入多个参数  
  10. a = [12345]  
  11. b = [11623]  
  12. c = [12345]  
  13. s = map(lambda (x, y, z): x * y * z, zip(a, b, c))  
  14. print 'map2:', s  
  15. #结果:map2: [1, 4, 54, 32, 75]  
reduce()函数:


[python]  view plain  copy
  1. r1 = reduce(lambda x, y: x * y, (2262))  #运算过程:(((2*2)*6)*2)  
  2. r2 = reduce(lambda x, y: x * y, (226), 2)  #<span style="font-family: Arial, Helvetica, sans-serif;">运算过程:(((2*2)*6)*2)</span>  
  3. print 'r1:', r1  # 结果:r1: 48  
  4. print 'r2:', r2  # 结果:r2: 48  

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

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


>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]

列表元素依次相连:

# -*- coding: UTF-8 -*-

l = ['a', 'b', 'c', 'd', 'e','f']
print l

#打印列表
print zip(l[:-1],l[1:])

输出结果:

['a', 'b', 'c', 'd', 'e', 'f']
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e'), ('e', 'f')]