【问题标题】:removing unmatching items from 2 lists in python从python中的2个列表中删除不匹配的项目
【发布时间】:2013-12-04 10:13:15
【问题描述】:

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

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

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

从 list1 中删除一项后,此循环卡住了。 此操作的正确代码是什么

【问题讨论】:

    标签: python list


    【解决方案1】:

    你可以用列表理解做这样的事情:

    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 - 这是一个错字:) 现已修复。
    【解决方案2】:

    你有没有想过set() ??

    有点像

    set(List1) & set(List2)
    

    【讨论】:

    • 是的 - 这很好用 - 但是对正在发生的事情进行一点解释呢?在将列表转换为集合时,您没有提到删除重复的注意事项 - 我觉得这是非常重要的信息。
    • @Lix:你是对的,你在答案中正确解释了顺便说一句,+1 :)
    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    相关资源
    最近更新 更多