filter函数的用法_Python3中一些高阶函数map、reduce、filter详解及示例

103d84a87261af137123d5f6f5746378.png

在编程语言中,高阶函数指的是接受函数作为输入或输出的函数。

map概述

python中的map()函数是一个内置的高阶函数,一般用法是map(function, iterable)。需要传入一个函数,这个函数可以是内置的,也可以是自己定义,也可以是匿名函数即lambda。第二个参数是一个可迭代对象,如列表、字典字符串等。map函数返回的是一个map对象,也是一个可迭代对象,可以利用for循环迭代查看元素,也可以尝试list()将其转为列表对象操作,map形式:

map(function, iterable, ...)

map用法

1.计算列表中所有数的平方

L1 = [1, 2, 3, 4]# 计算某数的平方def square(x): return x ** 2square_result = map(square, L1)print(list(square_result))# 配合lambda最佳square_result = map(lambda x: x ** 2, L1)print(list(square_result))

示例结果:

[1, 4, 9, 16][1, 4, 9, 16]

2. 处理序列对象中的字符串

# 集中处理字符串开头和结尾的换行符和空格S = [ 'I like Python', ' Python make me happy ', ' without python, without living.']NEW_S = list(map(lambda s: s.strip(), S))print(NEW_S)# 当然此例利用列表解析更加简洁:NEW_S = [s.strip() for s in S]print(NEW_S)

示例结果:

['I like Python', 'Python make me happy', 'without python, without living.']['I like Python', 'Python make me happy', 'without python, without living.']

多参数传递

map也接受多个可迭代对象作为参数传递,若可迭代对象元素数量不一致则传递至元素数量最小的为止

# 两组数两两相加L1 = [1, 2, 3, 4, 5, 6, 7]L2 = [5, 4, 3, 2, 1]sum_result = map(lambda x, y: x + y, L1, L2)for one in sum_result: print(one)

示例结果:

66666

reduce概述

reduce用于对可迭代对象中的元素进行累积操作,reduce接受两个参数,一个是函数f(x, y)参数(该函数必须有两个参数),另一个是可迭代对象。reduce行为是先将可迭代对象的前两个元素传入f(x, y)中,然后不断将f(x, y)的返回值再次和下一个迭代对象传入f(x, y),直到迭代完迭代对象中的元素,并返回最终的f(x, y)的返回值。reduce形式:

reduce(function, iterable[, initializer])

reduce用法

在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数。

from functools import reduceL = [1,2,3,4,5]sum_results = reduce(lambda x,y: x + y, L) print(sum_results)

示例结果:

15

上例即我们通过reduce高阶函数完成了对列表中五个数的累加过程。

filter概述

filter用于过滤筛选可迭代对象中的元素,如果符合条件则返回对应的元素序列(类型为filter),filter接受两个参数,一个是函数用于筛选元素,返回值为True或Flase,另一个是可迭代对象。

filter用法

evens = filter(is_odd, range(-5, 10))print(list(evens))

示例结果:

[2, 4, 6, 8]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值