首页 > 解决方案 > 如何删除列表中的所有项目在 Python 3 中的另一个列表中?

问题描述

我正在尝试编写一个将两个列表作为输入的函数:def array_diff(a, b):. 在此函数中,我想返回一个已过滤的a列表,该列表将删除所有也存在于 list 中的项目b。它将这样工作:

array_diff([1,2],[1]) == [2]

或者:

array_diff([1,2,2,2,3],[2]) == [1,3]

我写了以下代码:

def array_diff(a, b):
    for i in a:
        if i in b:
            a.remove(i)      
    return a

但是,即使我没有收到任何错误,当我尝试运行此函数并且 lista有两个具有相同值的项目,并且它存在于 list 中b时,它也无法正确过滤它。我不确定为什么会发生这种情况,但我也已经尝试过使用a.pop(i),但也没有用。我也尝试用 迭代列表for i in range(len(a)),但我收到错误说我遍历了列表的索引。

希望你能帮助我,谢谢!

标签: pythonpython-3.xlistfunction

解决方案


Use the filter function to filter out any items present in both lists like this:

def array_diff(a, b):    
    return list(filter(lambda item: item not in ls2, ls1))

ls1 = [1, 2, 3, 4, 5]
ls2 = [2, 5]
print(array_diff(ls1, ls2))

推荐阅读