从另一个列表中删除所有出现在列表中的元素假设我有两份名单,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
提交
取消