Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看專案原始碼
本篇閱讀的代碼實作了實作了兩個串列求交集的功能,同時支持使用一個過濾條件函式,串列中所有元素根據該條件求取交集,交集中是兩個串列的原始元素,
本篇閱讀的代碼片段來自于30-seconds-of-python,
intersection_by
def intersection_by(a, b, fn):
_b = set(map(fn, b))
return [item for item in a if fn(item) in _b]
# EXAMPLES
from math import floor
intersection_by([2.1, 1.2], [2.3, 3.4],floor) # [2.1]
intersection_by函式接收兩個串列和一個過濾條件函式,將提供的函式應用于兩個串列中的每個元素后,回傳一個存在于兩個串列中的元素的串列,函式通過對b中的每個元素應用fn來創建一個集合,然后在a上結合使用串列推導式和fn來只保留同時存在于兩個串列中的值,
map函式之前已經講解過,它會回傳一個迭代器,該迭代器會將變換函式fn應用于所有的串列元素上,
set是Python的一個特殊的資料型別,是由不重復元素組成的無序的集,本函式直接使用set型別消除了串列中的重復元素,
特別的,當過濾條件函式是lamda x:x時,函式轉化為直接求取兩個串列的交集,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/315871.html
標籤:Python
