1. 程式人生 > 實用技巧 >海選與包裝,Python中常用的兩個高階函式(講義)

海選與包裝,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學習資料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起來學習討論吧!