海选与包装,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两个高阶函数,好比选秀节目,前者类似“海选”,后者类似新人推出前的“包装”。

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

你可能感兴趣的:(Python实践,专攻重难点,python,编程)