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

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

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

叮当猫咪 2019-06-20 17:26:55
从另一个列表中删除所有出现在列表中的元素假设我有两份名单,l1和l2..我想表演l1 - l2的所有元素。l1不在l2.我可以想到一种简单的循环方法来实现这一点,但这将是非常低效率的。什么是节奏曲和有效的方式来做到这一点?举个例子,如果我有l1 = [1,2,6,8] and l2 = [2,3,5,8], l1 - l2应该回来[1,6]
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

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

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

l3将包含[1, 6].

希望这能帮上忙!


查看完整回答
反对 回复 2019-06-20
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

一种方法是使用集合:

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


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

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))


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 4685 浏览
慕课专栏
更多

添加回答

举报

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