首頁>技術>

一、filter(function, iterable) - 過濾(“海選”)

# 判斷落在第一象限的點[(x1, y1), (x2, y2)...]points = [(-1, 2), (2, 3), (-1, -2), (2, -2), (1, 2)]# 方法一:# 驗證函式:若在第一象限,則返回Truedef 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函式,傳入一個iterableslist = 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函式,傳入兩個iterableslist = map(lambda w, h: w * h, wlist, hlist)print('矩形的面積為:', list(slist))
矩形的面積為: [2, 6, 12, 20, 30]

總結:filter與map兩個高階函式,好比選秀節目,前者類似“海選”,後者類似新人推出前的“包裝”。

人生最遺憾的莫過於輕易地放棄了不該放棄的,固執地堅持了不該堅持的。

19
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 用Python批次裁取圖,來獲取資料夾中所有圖片名