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]))

最新文章

  1. 【Beta】Daily Scrum Meeting第二次
  2. 用Fmx调用Bass.dll
  3. 如何在Winform界面中设计图文并茂的界面
  4. Maven-006-手动部署第三方构件至 nexus 私服
  5. Redhat 7使用CentOS 7的Yum网络源
  6. eclipse如何修改dynamic web module version
  7. DFT basics
  8. JMeter入门合集
  9. 326.Power of Three
  10. 看仪表盘——validation
  11. DevExpress gridLookUpEdit 实现多选
  12. nefu 72 N!
  13. Hadoop学习笔记-003-CentOS_6.5_64_设置ssh免密码登录
  14. 如何给filter添加自定义接口及调用
  15. SpringBoot 基础01
  16. 03.Python网络爬虫第一弹《Python网络爬虫相关基础概念》
  17. 1.The Necessity of a Broad Education 全面教育的必要性
  18. Django:model中的ForeignKey理解
  19. PHP数组排序sort、asort与ksort用法
  20. JS深拷贝继承

热门文章

  1. POJ2286:The Rotation Game——题解
  2. srtlen实现以及与sizeof的比较
  3. bzoj2064: 分裂(集合DP)
  4. [NOI2008] 道路设计
  5. 表单验证:nice Validator
  6. BZOJ2434: [NOI2011]阿狸的打字机(AC自动机+dfs序+树状数组)
  7. AppWidget学习总结
  8. [mysql]深入Mysql字符集设置[转载]
  9. 查看Django版本
  10. Fixed: The Windows Process Activation Service service terminated with the following error: The system cannot find the file specified