map()

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

 def func(x):
return x*x r = map(func, [, , , , ])
print(type(r))
r = list(r)
print(r)

输出结果:

<class 'map'>
[, , , , ]

可以看出,map让函数func作用于列表的每一项,使列表的每一项都被函数func执行一次,即列表的每一项都进行平方。其返回值是map类型。

reduce()

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

 from functools import reduce

 def fn(x, y):
return x * + y f = reduce(fn, [, , , , ]) # 把序列变为整数
print(f)
print(type(f))

输出结果:

<class 'int'>

和map不同,虽然reduce也是作用于每个元素,但是reduce的作用结果要用在下次和另一个元素做累积计算。

map()和reduce()的结合使用

 from functools import reduce

 def fn(x, y):
return x * + y def char2num(s):
digits = {'': , '': , '': , '': , '': , '': , '': , '': , '': , '': }
return digits[s] f = reduce(fn, map(char2num, ''))
print(f)

输出结果:


可以将字符串类型转换为int类型

filter()

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

 def not_empty(s):
return s and s.strip()  # 不能直接写s.strip() f = filter(not_empty, ['A', '', 'B', None, 'C', ' '])
print(type(f))
print(list(f))

输出结果:

<class 'filter'>
['A', 'B', 'C']

sorted()

sorted()函数也是一个高阶函数,在列表的学习中初步接触了sorted(),但其实它还可以接收一个key函数来实现自定义的排序。

key指定的函数将作用于被排序对象的每一个元素上,并根据key函数返回的结果进行排序。

 l = sorted([, , -, , -], key=abs)   # 按绝对值大小排序
print(l) s = sorted(['bob', 'about', 'Zoo', 'Credit']) # 按ASCII大小排序
print(s) sl = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) # 忽略大小写排序
print(sl) sr = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) # 反向排序
print(sr)

输出结果:

[, , -, -, ]
['Credit', 'Zoo', 'about', 'bob']
['about', 'bob', 'Credit', 'Zoo']
['Zoo', 'Credit', 'bob', 'about']

同样的,sorted()也可以对元组和字典进行排序

 from operator import itemgetter    # 需要使用operator模块
L = [('Bob', ), ('Adam', ), ('Bart', ), ('Lisa', )]
print(sorted(L, key=itemgetter()))

输出结果:

[('Adam', ), ('Bart', ), ('Bob', ), ('Lisa', )]

当然,也能以values的值来排序,对字典的排序与元组类似,但返回值不同。

 from operator import itemgetter

 dic = {"Bob": , "Adam": , "Lisa": }

 print(sorted(dic,key=itemgetter()))

 print(sorted(dic, key=itemgetter()))

输出结果:

['Adam', 'Bob', 'Lisa']
['Adam', 'Lisa', 'Bob']

可以看到,不管是以key值进行排序,还是以value值进行排序,排序结果只返回对应顺序的key值。

匿名函数

 f = list(map(lambda x: x * x, [, , , , , , , , ]))
print(f)

输出结果:

[, , , , , , , , ]

上面就是一个匿名函数的使用,匿名函数 lambda x: x * x 实际上就是:

 def f(x):
return x * x

只是在这里没有显式地定义函数,这样因为函数没有名字,不必担心函数名冲突,而且代码看起来也简洁。

最新文章

  1. 设计模式之结构类模式大PK
  2. (转)Java中的static关键字解析
  3. strcpy strlen memcpy等的函数实现
  4. angular state和stateParams
  5. Yii2.0 执行流程分析
  6. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
  7. quartz定时任务中常用的cron表达式
  8. Delphi NativeXML 乱码的问题
  9. 关于Fragment与Activity的想法
  10. [转]C++实现系统服务暂停、停止、启动
  11. 条款21: 必须返回对象时,不要强行返回对象的reference
  12. 翻译:MariaDB DATABASE()
  13. 比较日期大小以及获取select选中的option的value
  14. 使用Xpath定位元素(和元素定位相关的Xpath语法)
  15. react VS vue 我们究竟该如何选择(从项目的角度帮你分析)
  16. python 词云小demo
  17. git 退回到前面某一版本的具体操作方式
  18. Kubernetes之总体了解
  19. 「GXOI / GZOI2019」旧词
  20. [原创]升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID

热门文章

  1. Anaconda安装python tensorflow 环境
  2. MyCat读写分离-笔记(四)
  3. Anaconda python环境管理
  4. Promise 返回值
  5. 如何在.Net Core调用NodeJs
  6. 测试工作之--adb代码
  7. Vue+localstrong登录注册,并保持登录状态
  8. 记录几个爬取动态网页时的问题(下拉框,旧的元素无法获取,获取的源代码和f12看到的不一致,爬取延迟)
  9. 日常报错记录4:ssh工程复制粘贴顺序。
  10. SpringBoot使用ELK日志收集