猿问
下载APP

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

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

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

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

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


叮当猫咪
浏览 308回答 3
3回答

千万里不及你

Python有一个名为清单理解这非常适合让这类事情变得非常容易。下面的语句完全按照您的要求执行,并将结果存储在l3:l3 = [x for x in l1 if x not in l2]l3将包含[1, 6].希望这能帮上忙!

慕盖茨1488219

一种方法是使用集合:>>> set([1,2,6,8]) - set([2,3,5,8])set([1, 6])

蝴蝶不菲

扩展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))
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答