Python函数式编程-map()、zip()、filter()、reduce() - 企业简介 - 正定县枫林商贸有限公司
现在的位置: 主页 > 企业简介 > 文章正文
Python函数式编程-map()、zip()、filter()、reduce()
作者:正定县枫林商贸有限公司 来源:www.hbflsm.com 发布时间:2017-09-05 12:26:25
Python函数式编程-map()、zip()、filter()、reduce()、lambda()

Python函数式编程-map()、zip()、filter()、reduce()、lambda(),三个函数比较类似,都是应用于序列的内置函数。常见的序列包括list、tuple、str。

map函数

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

map函数的定义:

map(function, sequence[, sequence, ...]) -> list

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。
让我们来看一下只有一个seq的时候,map()函数是如何工作的。

这里写图片描述

示例一

比如要对一个序列中的每个元素进行平方运算:

map(lambda x: x ** 2, [1, 2, 3, 4, 5])

返回结果为:

[1, 4, 9, 16, 25]

或者

>>> def f(x): ... return x * x ... >>> map(f, [1, 2, 3, 4, 5]) [1, 4, 9, 16, 25]

map()传入的第一个参数是f,即函数对象本身。

注意:map()函数不改变原有的 list,而是返回一个新的 list。

不需要map()函数,写一个循环,也可以计算出结果

L = [] for n in [1, 2, 3, 4, 5]: L.append(f(n)) print L

把f(x)作用在list的每一个元素并把结果生成一个新的list。

示例二

#使用lambda >>> print map(lambda x: x % 2, range(7)) [0, 1, 0, 1, 0, 1, 0] #使用列表解析 >>> print [x % 2 for x in range(7)] [0, 1, 0, 1, 0, 1, 0]

2、当seq多于一个时,map可以并行(注意是并行)地对每个seq执行如下图所示的过程

这里写图片描述

在参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用function函数。

示例

比如要对两个序列中的元素依次求和。

map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

map返回的list中第一个元素为,参数序列1的第一个元素加参数序列2中的第一个元素(1 + 2),
list中的第二个元素为,参数序列1中的第二个元素加参数序列2中的第二个元素(3 + 4),
依次类推,最后的返回结果为:

[3, 7, 11, 15, 19]

要注意function函数的参数数量,要和map中提供的集合数量相匹配。
如果集合长度不相等,会以最小长度对所有集合进行截取。

当函数为None时,操作和zip相似:

map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

返回结果为:

[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:

>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]) ['1', '2', '3', '4', '5', '6', '7', '8', '9']

由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。

比如假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:
输入:[‘adam’, ‘LISA’, ‘barT’]
输出:[‘Adam’, ‘Lisa’, ‘Bart’]

def format_name(s): s1=s[0:1].upper()+s[1:].lower(); return s1; print map(format_name, ['adam', 'LISA', 'barT']) ***将元组转换成list*** >>> map(int, (1,2,3)) [1, 2, 3] ***将字符串转换成list*** >>> map(int, '1234') [1, 2, 3, 4] ***提取字典的key,并将结果存放在一个list中*** >>> map(int, {1:2,2:3,3:4}) [1, 2, 3] ***字符串转换成元组,并将结果以列表的形式返回*** >>> map(tuple, 'agdf') [('a',), ('g',), ('d',), ('f',)] #将小写转成大写 def u_to_l (s): return s.upper() print map(u_to_l,'asdfd')

zip函数

Python函数式编程之zip()
zip()函数具体的工作机制是,将每个列表中同一位置的元素取出来组成一个元组,存放到一个列表中,然后返回这个列表。

>>> x = [1,2,3] >>> y = ['a','b','c'] >>> z = [4,5,6] >>> zip_xyz = zip(x, y, z) >>> print zip_xyz [(1, 'a', 4), (2, 'b', 5), (3, 'c', 6)]

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站设计 http://www.feimao666.com


  • 上一篇:[Android]自定义带删除输入框
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 正定县枫林商贸有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100