从python中的2个列表中删除不匹配的项目

时间:2013-12-04 10:13:15

标签: python list

如果list2中不存在,我需要从list1中删除所有不匹配的项目

 List1 = ['dog', 'cat', 'bird']
 List2 = ['dog']

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

从list1中删除一个项目后,此循环停滞。 这个操作的正确代码是什么

2 个答案:

答案 0 :(得分: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],因为它们是原始列表中唯一出现的两个元素。

答案 1 :(得分:2)

您是否考虑过set() ??

这样的东西
set(List1) & set(List2)