为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个列表中删除所有出现在列表中的元素

/ 猿问

从另一个列表中删除所有出现在列表中的元素

叮当猫咪 2019-06-20 17:26:55

从另一个列表中删除所有出现在列表中的元素

假设我有两份名单,l1l2..我想表演l1 - l2的所有元素。l1不在l2.

我可以想到一种简单的循环方法来实现这一点,但这将是非常低效率的。什么是节奏曲和有效的方式来做到这一点?

举个例子,如果我有l1 = [1,2,6,8] and l2 = [2,3,5,8]l1 - l2应该回来[1,6]


查看完整描述

3 回答

?
千万里不及你

Python有一个名为清单理解这非常适合让这类事情变得非常容易。下面的语句完全按照您的要求执行,并将结果存储在l3:

l3 = [x for x in l1 if x not in l2]

l3将包含[1, 6].

希望这能帮上忙!


查看完整回答
反对 回复 2019-06-20
?
慕盖茨1488219

一种方法是使用集合:

>>> set([1,2,6,8]) - set([2,3,5,8])set([1, 6])


查看完整回答
反对 回复 2019-06-20
?
蝴蝶不菲

扩展Donut的答案和这里的其他答案,您可以通过使用生成器理解而不是列表理解来获得更好的结果,并使用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))


查看完整回答
反对 回复 2019-06-20

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信