Python3的高阶函数map,reduce,filter的示例详解

函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

注意其中:map和filter返回一个惰性序列,可迭代对象,需要转化为list

>>> a = 3.1415
>>> round(a,2)
3.14
>>> a_round = round
>>> a_round(a,2)
3.14
>>> def func_devide(x, y, f):
  return f(x) - f(y)
#传递参数为函数
print(func_devide(9.3, 3.2, round))

1. map函数

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

>>> print(list(map(str, [1, 2, 3])))
['1', '2', '3']
>>> dt = map(str,[-1,2,3,4,5,-34,-45,-23.454])
>>> dt
<map object at 0x10f431dd8>
>>> list(dt)
['-1', '2', '3', '4', '5', '-34', '-45', '-23.454']
>>> dt = map(abs,[-1,2,3,4,5,-34,-45,-23.454])
>>> list(dt)
[1, 2, 3, 4, 5, 34, 45, 23.454]

注意报错:TypeError: 'map' object is not callable

一般出现的原因是迭代对象(str,abs等)或者函数(map)被修改,不再是原来的函数,导致出现不可迭代对象

2. reduce函数

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

def add(x,y):
...   return x + y
...
>>> reduce(add,[1,2,3,4,5,6,7,8,9,10])
55
>>> def concate(x,y):
...   return str(x)+str(y)
...
>>> reduce(concate,[1,2,3,4,5,6,7,8,9,0])
'1234567890'

reduce和map函数结合做字符串转整型(或者整型转字符串)

>>> str = '12121212132323'
>>> dic_str_int = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
>>> def str_arr(x):
...   dic_str_int = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
...   return dic_str_int[x]
...
>>> def int_dum(x,y):
...   return 10*x + y
...
>>> reduce(int_dum,map(str_arr,str))
12121212132323

示例,转换列表内数据为大写,首字母大写

>>> names = ['jack','john','wilianmon','jobs','bill','gates']
>>> def str_upper(string):
...   return string.upper()
...
>>> names = map(str_upper,names)
>>> list(names)
['JACK', 'JOHN', 'WILIANMON', 'JOBS', 'BILL', 'GATES']
>>> def str_capitialize(string):
...   return string.capitalize()
...
>>> names = ['jack','john','wilianmon','jobs','bill','gates']
>>>
>>> names = map(str_capitialize,names)
>>> list(names)
['Jack', 'John', 'Wilianmon', 'Jobs', 'Bill', 'Gates']

列表内参数求所有元素乘积:

int_li = [2,3,5,10]
>>> reduce(lambda x, y: x*y,int_li)
300
>>> def func_mult(li=None):
...   return reduce(lambda x, y: x*y,li)
...
>>> func_mult(int_li)
300

上面的可以根据需要转成函数,更方便调用

'123.456'转成整数123.456

方法一:截断之后拼接

def string_int(strs):
  str_li = strs.split('.')
  def str_int(str):
    dic_str_int = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dic_str_int[str]
  int_1 = reduce(lambda x, y: x*10+y, list( map(str_int,str_li[0])))
  int_2 = reduce(lambda x,y: x*10 + y,list(map(str_int,str_li[1])))
  return int_1 + int_2/(10**(len(str_li)+1))

res = string_int('123.456')
print(res)
#结果:123.456

方法二: 转成纯数字字符串

def string_int1(strs):
  # 记住位置,替换
  point_len = len(strs) - strs.find('.')-1
  str_li = strs.replace('.', '')
  def str_int(str):
    dic_str_int = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return dic_str_int[str]
  int_num = reduce(lambda x,y: x*10 + y,list(map(str_int,str_li)))
  return int_num/(10**(point_len))

res = string_int1('123.456')
print(res)
#结果:123.456

3. filter函数

filter()也接收一个函数和一个序列。从一个序列中筛出符合条件的元素。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

注意:和map函数的区别

函数名 区别
map 作用于每个可迭代对象的元素,并返回处理之后的元素
filter 作用于可迭代内每个元素,根据计算后结果:True保留,Flase去掉

eg: 获取列表内所有的整数类型元素

def only_int(x):
  try:
    if isinstance(x, int):
      return True
    else:
      return False
  except ValueError as e:
    return False
dt = filter(type_int,[1,2,3,3,'3232',-34.5,34.5])
>>> list(dt)
[1, 2, 3, 3]

总结

以上所述是小编给大家介绍的Python3的高阶函数map,reduce,filter的示例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Pythont特殊语法filter,map,reduce,apply使用方法

    (1)lambda lambda是Python中一个很有用的语法,它允许你快速定义单行最小函数.类似于C语言中的宏,可以用在任何需要函数的地方. 基本语法如下: 函数名 = lambda args1,args2,...,argsn : expression 例如: add = lambda x,y : x + y print add(1,2) (2)filter filter函数相当于一个过滤器,函数原型为:filter(function,sequence),表示对sequence序列中的每一个

  • Python内置函数之filter map reduce介绍

    Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当于过滤器.调用一个布尔函数bool_func来迭代遍历每个seq中的元素:返回一个使bool_seq返回值为true的元素的序列. >>> N=range(10) >>> print filter(lambda x:x>

  • python高级特性和高阶函数及使用详解

    python高级特性 1.集合的推导式 •列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if codition - 可选 •字典推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:{key_exp:value_exp for item in collection if codition} •集合推导式 语法:{exp for item in collection if

  • Python中map,reduce,filter和sorted函数的使用方法

    map map(funcname, list) python的map 函数使得函数能直接以list的每个元素作为参数传递到funcname中, 并返回响应的新的list 如下: def sq(x): return x*x #求x的平方 map(sq, [1,3, 5,7,9]) #[1, 9, 25, 49, 81] 在需要对list中的每个元素做转换的时候, 会很方便 比如,把list中的每个int 转换成str map(str, [23,43,4545,324]) #['23', '43',

  • Python中的map、reduce和filter浅析

    1.先看看什么是 iterable 对象 以内置的max函数为例子,查看其doc: 复制代码 代码如下: >>> print max.__doc__max(iterable[, key=func]) -> valuemax(a, b, c, ...[, key=func]) -> value With a single iterable argument, return its largest item.With two or more arguments, return t

  • python利用高阶函数实现剪枝函数

    本文为大家分享了python利用高阶函数实现剪枝函数的具体代码,供大家参考,具体内容如下 案例: 某些时候,我们想要为多个函数,添加某种功能,比如计时统计,记录日志,缓存运算结果等等 需求: 在每个函数中不需要添加完全相同的代码 如何解决? 把相同的代码抽调出来,定义成装饰器 求斐波那契数列(黄金分割数列),从数列的第3项开始,每一项都等于前两项之和 求一个共有10个台阶的楼梯,从下走到上面,一次只能迈出1~3个台阶,并且不能后退,有多少中方法? 上台阶问题逻辑整理: 每次迈出都是 1~3 个台

  • 详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首先是Python3-->代码文件都是用utf-8来解释的.将代码和文件读到内存中就变成了Unicode,这也就是为什么Python只有encode没有decode了,因为内存中都将字符编码变成了Unicode,而Unicode是万国码,可以"翻译"所以格式编码的格式.Python3中

  • Python中的特殊语法:filter、map、reduce、lambda介绍

    filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回: 复制代码 代码如下: >>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] >>

  • Python3的高阶函数map,reduce,filter的示例详解

    函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. 注意其中:map和filter返回一个惰性序列,可迭代对象,需要转化为list >>> a = 3.1415 >>> round(a,2) 3.14 >>> a_round = round >>> a_round(a,2) 3.14 >>> def func_devide(x, y, f): return f(x) - f(y

  • python中三种高阶函数(map,reduce,filter)详解

    map(function,seq[,seq2]) 接收至少两个参数,基本作用为将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列 返回一个可迭代的map对象 function:函数对象 py2中可为None,作用等同于zip() 如: py3中不可为None,None是不可调用.不可迭代对象 seq:可迭代对象,可以传一个或多个 # 传一个: def func(i):return i*2 print([i for i in map(func,[1,'2'])]) # [2,'22']

  • 简单了解python高阶函数map/reduce

    高阶函数map/reduce 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 =

  • Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】

    本文实例讲述了Python3.5函数的定义与使用.分享给大家供大家参考,具体如下: 1.函数学习框架 2.函数的定义与格式 (1)定义 (2)函数调用 注:函数名称不能以数字开头,建议函数名称的开头用小写的字母 (3)函数有四种格式,分别是:无参数无返回值,有参数无返回值.无参数有返回值.有参数有返回值 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu # 无参数无返回值 def hello(): # 函数体/

  • Array.reduce使用原理示例详解

    目录 正文 重新了解 Array.reduce reduce 的运用场景 用于计算数据 将多维数组转为一维数组 将函数作为参数 其他场景 最后 正文 我们经常会用到 Array 对象的 reduce 方法,把它用于做一些计算.或者数据组合,发现自己用了那么多年 reduce ,竟然还不是很了解它,最近才发现如果不传递初始值,它也可以正常进行,数组也可以是一个函数数组,来增强我们的代码. 本篇文章将带你重来了解 Array.reduce 和运用场景. 重新了解 Array.reduce 我们来看一

  • JavaScript中自带的 reduce()方法使用示例详解

    1.方法说明 , Array的reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是: [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) 2. 使用示例 'use strict'; function string2int(s){ if(!s){ alert('the params empty'); return; } if

  • AngularJS的Filter的示例详解

    贴上几个有关Filter使用的几个示例. 1. 首先创建一个表格 <body ng-app="app"> <div class="divAll" ng-controller="tableFilter"> <input type="text" placeholder="输入你要搜索的内容" ng-model="key"> <br><br

  • 一篇文章带你学习Python3的高阶函数

    目录 1.高阶函数 2.map/reduce 3.filter 4.sorted 总结 1.高阶函数 # 1.变量指向函数 # 调用函数和函数本身 print("-10的绝对值为:",abs(-10)) print("绝对值函数本身:",abs) print("--------------------------------------------------") # 把函数调用结果和函数本身赋值给变量,即变量指向函数 abs1 = abs(-1

  • react高阶组件经典应用之权限控制详解

    前言 所谓高级组件,即:接受一个组件作为参数,并且其返回值也为一个react组件 而大家应该都知道,权限控制算是软件项目中的常用功能了.在网站中,权限控制一般分为两个维度:页面级别和页面元素级别. 我们来说说页面元素粒度的权限控制.在某个页面中,有个"创建用户"的按钮,管理员才能看到. 一般想到的做法类似这样 class Page extends Component{ render() { let hasCreatePermission = tool.getAuth("cre

  • python高阶函数map()和reduce()实例解析

    1.map()传入的有两个参数,函数和可迭代对象(Itreable),map()是把传入的函数依次作用于序列的每个元素,结果返回的是一个新的可迭代对象(Iterable). map()代码如下: # 定义f函数,返回的是x*x def f(x): return x*x # 调用map(),根据传入的函数和list,依次作用于每个元素 s=map(f,[1,2,3,4,5]) # 打印返回的迭代器的值 print(list(s)) # 查看类型 print(type(s)) 结果: [1, 4,

随机推荐