從另一個列表中刪除所有出現在列表中的元素假設我有兩份名單,l1和l2..我想表演l1 - l2的所有元素。l1不在l2.我可以想到一種簡單的循環方法來實現這一點,但這將是非常低效率的。什么是節奏曲和有效的方式來做到這一點?舉個例子,如果我有l1 = [1,2,6,8] and l2 = [2,3,5,8], l1 - l2應該回來[1,6]
3 回答
蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
您可以通過使用生成器理解而不是列表理解來獲得更好的結果,并使用set數據結構(因為in運算符在列表上是O(N),而在集合上是O(1)。
所以這里有一個對你有用的函數:
def?filter_list(full_list,?excludes): ????s?=?set(excludes) ????return?(x?for?x?in?full_list?if?x?not?in?s)
結果將是一個可迭代的,它將懶洋洋地獲取篩選的列表。如果您需要一個真正的列表對象(例如,如果您需要執行len()),然后您就可以輕松地構建如下所示的列表:
filtered_list?=?list(filter_list(full_list,?excludes))
添加回答
舉報
0/150
提交
取消
