在Python中从2个列表中删除不匹配的项

3
我需要从list1中删除所有在list2中不存在的不匹配项。
 List1 = ['dog', 'cat', 'bird']
 List2 = ['dog']

 for x in List2:
      for y in List1:
           if x!=y:
                List1.remove(x)

从list1中删除一个元素后,这个循环卡住了。 请提供正确的代码。

2个回答

6
您可以使用列表推导式来完成类似以下的操作:
list_intersection = [item for item in List1 if item in List2]

这将遍历 List1 中的所有项,并仅返回也在 List2 中的元素。
现在,list_intersection 变量只包含同时出现在两个列表中的元素,忽略只在其中一个列表中出现的项。
如果您不介意在交集过程中删除重复项,您可以将两个列表转换为sets并执行set1.intersection(set2)。这将完成相同的操作 - 但请记住,将列表转换为集合会删除重复项。完成后,您可以将集合转换回列表。
l1 = [ 1, 1, 2, 3 ]
l2 = [ 2, 3, 4, 3 ]
l3 = set( l1 ).intersection( set( l2 ) )
l3 = list( l3 )

变量l3现在将等于[2, 3],因为这些是两个原始列表中唯一出现的元素。

@Streak - 那是个打错字 :) 现在已经修正了。 - Lix

2
你想过set()这件事吗?
类似这样的东西。
set(List1) & set(List2)

是的 - 这很好用 - 但是能不能稍微解释一下发生了什么?你并没有提到将列表转换为集合时去重的考虑,我觉得那是非常重要的信息。 - Lix
1
@Lix:你说得对,并且你在回答中解释得很正确。顺便说一句,点赞+1 :) - Cédric Julien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接