map、reduce、filter、sorted函数,这些函数都支持函数作为参数。

  • map函数

  • map() 函数语法:map(function, iterable, ...)
  • function -- 函数
  • iterable -- 一个或多个序列

map()接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每个元素都作平方,就可以用map()函数: 因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:

def f(x):
return x*x
for i in map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]):
print(i) # 输出结果:1, 4, 9, 10, 25, 36, 49, 64, 81
注意:map()函数不改变原有的 list,而是返回一个新的 list。

利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。

由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。 假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list: 输入:['adam', 'LISA', 'barT'] 输出:['Adam', 'Lisa', 'Bart']

a = ['adam', 'LISA', 'barT']

def format_name(a):
result = a[0:1].upper()+a[1:].lower()
return result for i in map(format_name,a):
print(i) # 输出结果:
Adam
Lisa
Bart
  • reduce函数

  • reduce() 函数语法:reduce(function, iterable[, initializer])
  • function -- 函数,有两个参数
  • iterable -- 可迭代对象
  • initializer -- 可选,初始参数

reduce接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

例如,编写一个f函数,接收x和y,返回x和y的和:

def add(x,y):
return x+y

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

1
2
3
4
5
先计算头两个元素:f(1, 3),结果为4
再把结果和第3个元素计算:f(4, 5),结果为9
再把结果和第4个元素计算:f(9, 7),结果为16
再把结果和第5个元素计算:f(16, 9),结果为25
由于没有更多的元素了,计算结束,返回结果25

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

1
reduce(f, [1, 3, 5, 7, 9], 100)

结果将变为125。

示例:

from functools import reduce

a = [1,2,3,4,5]

def f(x,y):
return x+y print(reduce(f,a,100)) # 输出结果:115

更加高级的用法,根据字典的性别进行分类:

from functools import reduce

scientists =({'name':'Alan Turing', 'age':105, 'gender':'male'},
{'name':'Dennis Ritchie', 'age':76, 'gender':'male'},
{'name':'Ada Lovelace', 'age':202, 'gender':'female'},
{'name':'Frances E. Allen', 'age':84, 'gender':'female'}) def group_by_gender(a,b):
a[b['gender']].append(b['name'])
return a print(reduce(group_by_gender,scientists,{'male':[],'female':[]}))
  • filter函数

  • filter(function, iterable)
  • function -- 判断函数。
  • iterable -- 可迭代对象。

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

a = [1,2,3,4,5,6,7,8,9,10]

def is_odd(x):
if x%2 == 0:
return x for i in filter(is_odd,a):
print(i) # 输出结果:2 4 6 8
  • sorted函数

  • sorted(iterable,key,reverse)
  • iterable表示可以迭代的对象
  • key表示选取参与比较的元素
  • reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序

示例:根据字典的值对字典进行排序:

dict = {"a":20,"b":60,"c":10,"d":50}

print(sorted(dict.items(), key=lambda x: x[1]))

python中的map、reduce、filter、sorted函数的更多相关文章

  1. python中lambda,map,reduce,filter,zip函数

    函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...

  2. Python map/reduce/filter/sorted函数以及匿名函数

    1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...

  3. python基础之map/reduce/filter/sorted

    ---map(fun,iterable) 首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象.即map(fun,iterable) map函数就是将具 ...

  4. python 中的map(), reduce(), filter

    据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...

  5. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  6. Python中的Map/Reduce

    MapReduce是一种函数式编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数 ...

  7. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  8. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  9. python中的map、filter、reduce函数

    三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str.   1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...

  10. python函数式编程学习之map,reduce,filter,sorted

    map(f, list)函数用于将函数f运用到list里的每个元素中 写个例子 def pow(x): return x*x map(pow, [2,3,4]) reduce(f, list)函数用于 ...

随机推荐

  1. C++中typedef和#define简介

    本文基于<C++ Primer(第5版)>和网上博客,整理而成. 一.类型别名 类型别名是一个名字,它是某种类型的同义词,有两种方法可用于定义类型别名:typedef.using. 1.关 ...

  2. NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2题解

    上星期打的...题有点水,好多人都AK了 T1排个序贪心就好了 #include<iostream> #include<cstring> #include<cstdlib ...

  3. ContestHunter暑假欢乐赛 SRM 08

    rating再次跳水www A题贴HR题解!HR智商流选手太强啦!CYC也好强%%%发现了len>10大概率是Y B题 dp+bit优化,据LLQ大爷说splay也可以优化,都好强啊.. C题跑 ...

  4. mysql 主从同步 M-S 搭建

    主机: [root@ygy130 ~]# mysql -usystem -p123456 mysql> create database HA; mysql> use HA; mysql&g ...

  5. 分享一个JQuery弹出层插件

    JQuery插件TipsWindown 1.1 一个基于jQuery的弹出层.支持拖拽,支持内容为文字,图片,URL等!至于兼容性.在IE6下,弹出对像无法绝对固定.其他应该没啥大问题: 最新更新:( ...

  6. ACE自适配通信环境简介

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/03/580795.html ACE自适配通信环境 (Adaptive Communicatio ...

  7. C#学习之泛型功能与限制

    在泛型类的描述中还会有时需要很多限制,例如对待一个泛型类型,在类中定义一个变量需要初始化时,不能确定是用Null还是0. 因为不能够确定它是值类型还是引用类型,这时可以用到default语句(下面有介 ...

  8. Java中String的hash函数分析

    转载自:http://blog.csdn.net/hengyunabc/article/details/7198533 JDK6的源码: [java] view plaincopy /** * Ret ...

  9. git设置不需要密码

    https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...

  10. JAVA有关命名规范

    包名:          xxxyyyzzz 全小写 类名/接口名:XxxYyyZzz 所有单词首字母大写,其他小写 方法名:       xxxYyyZzz第一个单词首字母小写,其他单词首字母大写 ...