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

Pyt*_*zer 3 python list

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

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

 for x in List2:
      for y in List1:
           if x!=y:
                List1.remove(x)
Run Code Online (Sandbox Code Playgroud)

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

Lix*_*Lix 6

你可以用list comprehension做这样的事情:

list_intersection = [item for item in List1 if item in List2]
Run Code Online (Sandbox Code Playgroud)

这将迭代所有项目List1并仅返回同样位于其中的元素List2.

list_intersection变量现在仅包含出现在两个列表中的元素,忽略仅出现在其中一个列表中的项目.


如果您不介意在此交叉过程中删除重复项,则可以将两个列表转换为集合并执行set1.intersection( set2 ).这将做同样的事情 - 但请记住,将列表转换为集合将删除重复项.完成后,您可以将设置转换回列表.

l1 = [ 1, 1, 2, 3 ]
l2 = [ 2, 3, 4, 3 ]
l3 = set( l1 ).intersection( set( l2 ) )
l3 = list( l3 )
Run Code Online (Sandbox Code Playgroud)

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