Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)

感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下。

以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看。

Python内建了map()和reduce()函数。

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

举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:

现在,我们用Python代码实现:

>>> def f(x):

... return x * x ...

>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]

map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

比方说对一个序列求和,就可以用reduce实现:

>>> from functools import reduce

>>> def add(x, y):

... return x + y ...

>>> reduce(add, [1, 3, 5, 7, 9]) 25

当然求和运算可以直接用Python内建函数sum(),没必要动用reduce。

但是如果要把序列[1, 3, 5, 7, 9]变换成整数13579,reduce就可以派上用场:

>>> from functools import reduce

>>> def fn(x, y):

... return x * 10 + y ...

>>> reduce(fn, [1, 3, 5, 7, 9])

13579

这个例子本身没多大用处,但是,如果考虑到字符串str也是一个序列,对上面的例子稍加改动,配合map(),我们就可以写出把str转换为int的函数:

>>> from functools import reduce

>>> def fn(x, y):

... return x * 10 + y ...

>>> def char2num(s):

... return {‘0‘: 0, ‘1‘: 1, ‘2‘: 2, ‘3‘: 3, ‘4‘: 4, ‘5‘: 5, ‘6‘: 6, ‘7‘: 7, ‘8‘: 8, ‘9‘: 9}[s] ...

>>> reduce(fn, map(char2num, ‘13579‘)) 13579

还可以用lambda函数进一步简化成:

from functools import reduce

def char2num(s):

  return {‘0‘: 0, ‘1‘: 1, ‘2‘: 2, ‘3‘: 3, ‘4‘: 4, ‘5‘: 5, ‘6‘: 6, ‘7‘: 7, ‘8‘: 8, ‘9‘: 9}[s]

def str2int(s):

  return reduce(lambda x, y: x * 10 + y, map(char2num, s))

也就是说,假设Python没有提供int()函数,你完全可以自己写一个把字符串转化为整数的函数,而且只需要几行代码!

lambda函数的用法在后面介绍。

时间: 2024-10-14 00:54:26

Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)的相关文章

【python】filter,map和reduce函数介绍

filter(function, iterable)map(function, iterable)reduce(function, sequence) filter将 function依次作用于iterable的每个元素,如果返回值为true, 保留元素,否则从iterable里面删除.function必须返回是一个bool类型的函数.例如: def test(x): return (x > 3) filter(test, [1, 2, 3, 4, 5]) =====> [4, 5] map将

018.Python迭代器以及map和reduce函数

一 迭代器 能被next进行调用,并且不断返回下一个值的对象 特征:迭代器会生成惰性序列,它通过计算把值依次的返回,一边循环一边计算而不是一次性得到所有数据 优点:需要数据的时候,一次取一个,可以大大节省内存空间.而不是一股脑的把所有数据放进内存. 可以遍历无限量的数据 next调用迭代器时,方向是单向不可逆的. 1.1 可迭代性对象 __iter__ 如果这个数据类型含有__iter__ 方法 我们就说他是可迭代对象 dir 获取当前数据内置的方法和属性. setvar = {1,2,"abc

Python中的map与reduce函数简介

1.从参数方面来讲: map()函数: map()包含两个参数,第一个是参数是一个函数,第二个是序列(列表或元组).其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数. reduce()函数: reduce() 第一个参数是函数,第二个是 序列(列表或元组).但是,其函数必须接收两个参数. 2.从对传进去的数值作用来讲: map()是将传入的函数依次作用到序列的每个元素,每个元素都是独自被函数"作用"一次:(请看下面的栗子) reduce()是将传人的函数作用在序列的第

python练习之map()和reduce()函数

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']: 1 def normalize(name): 2 name=name.lower() 3 name=name[0].upper()+name[1:] 4 return name 5 6 7 8 9 10 # 测试: 11 L1 = ['adam', 'LISA', 'barT'] 12 L2 = l

python自学笔记

python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 循环 6.使用dict和set 6.1 dict 6.2 set 7.函数的使用 7.1函数返回多个值,同时接受多个值 7.2函数参数的默认值 7.3可变参数的函数 7.4可变个数带参数名的入参 7.5参数类型组合 8.关于函数递归 9.python的高级特性 9.1切片 9.2遍历 9.3列表生

python学习笔记11-python内置函数

python学习笔记11-python内置函数 一.查看python的函数介绍: https://docs.python.org/2/library/ 二.python内置函数 1.abs获取绝对值: 通过python官网查看abs abs(x) Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument

map和reduce函数的使用

map和reduce函数是定义在Array中的两个方法,可用于提高处理数组的性能和简化代码. 关于它们的概念,参考Google这篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters". map map函数是一个高阶函数,它会调用传入的函数来隐式的处理Array中的每一个元素,因此当我们确定好需要对数组中的每个元素进行的操作时,可先定义好处理的方法, 然后在通过map函数将定义好的函数作为参数传进去,这样浏览器就

Python中map和reduce函数

①从参数方面来讲: map()函数: map()包含两个参数,第一个是参数是一个函数,第二个是序列(列表或元组).其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数. reduce()函数: reduce() 第一个参数是函数,第二个是 序列(列表或元组).但是,其函数必须接收两个参数. ②从对传进去的数值作用来讲: map()是将传入的函数依次作用到序列的每个元素,每个元素都是独自被函数"作用"一次:(请看下面的栗子) reduce()是将传人的函数作用在序列的第一个

python的map和reduce函数

map函数时python的高级内置函数 语法为:map(function, iterable, ...) 参数:function -- 函数iterable -- 一个或多个序列 将function作用于iterable序列中的每一个元素,并将调用的结果返回 主要是为了并行运算,非常高效 1. 一个输入参数,输入为列表 # 1. 一个参数 def map_func(x): res = x**2 return res a1 = map(map_func, [1,2,3]) #直接返回的是objec