海选与包装,Python中常用的两个高阶函数(讲义)

一、filter(function, iterable) - 过滤(“海选”)

# 判断落在第一象限的点[(x1, y1), (x2, y2)...]
points = [(-1, 2), (2, 3), (-1, -2), (2, -2), (1, 2)]

# 方法一:
# 验证函数:若在第一象限,则返回True
def func(p):
    return (p[0] > 0) and (p[1] > 0)
# 返回所有第一象限的点
sel_points = filter(func, points)
print('第一象限的点:', list(sel_points))
第一象限的点: [(2, 3), (1, 2)]
# 方法二:
# 采用lambda函数,返回所有第一象限的点
sel_points = filter(lambda p: (p[0] > 0) and (p[1] > 0), points)
print('第一象限的点:', list(sel_points))
第一象限的点: [(2, 3), (1, 2)]
# filter(function, iterable)的特殊用法:
x = [1, 2, 3, False, None, 0, '', (), [], {}]
# 若function为None,则默认作为身份函数,
# 会剔除掉iterable中所有为“假”的元素。
# python中的“假”包括:
#   - False
#   - None
#   - 0
#   - ’’,即空字符串
#   - (),即空元组
#   - [],即空列表
#   - {},即空字典
sel_x = filter(None, x)
print(list(sel_x))
[1, 2, 3]

二、map(function, iterable, …) - 映射(“包装”)

# 根据半径求圆的面积
rlist = [1, 2, 3, 4, 5]

# 采用lambda函数,传入一个iterable
slist = map(lambda r: 3.14 * r ** 2 , rlist)
print('圆的面积为:', list(slist))
圆的面积为: [3.14, 12.56, 28.26, 50.24, 78.5]
# 根据w、h求矩形的面积
wlist = [1, 2, 3, 4, 5]
hlist = [2, 3, 4, 5, 6]

# 采用lambda函数,传入两个iterable
slist = map(lambda w, h: w * h, wlist, hlist)
print('矩形的面积为:', list(slist))
矩形的面积为: [2, 6, 12, 20, 30]

总结:filter与map两个高阶函数,好比选秀节目,前者类似“海选”,后者类似新人推出前的“包装”。

人生最遗憾的莫过于轻易地放弃了不该放弃的,固执地坚持了不该坚持的。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值