如何删除Python 3中另一个列表中的列表中的所有项?

如何删除Python 3中另一个列表中的列表中的所有项?,python,python-3.x,list,function,Python,Python 3.x,List,Function,我正在尝试编写一个函数,它将两个列表作为输入:def array\u diff(a,b):。在这个函数中,我想返回一个过滤后的a列表,该列表将删除列表b中的所有项目。其工作原理如下: array_diff([1,2],[1])==[2] 或: array_diff([1,2,2,3],[2])==[1,3] 我编写了以下代码: def array_diff(a, b): for i in a: if i in b: a.remove(i)

我正在尝试编写一个函数,它将两个列表作为输入:
def array\u diff(a,b):
。在这个函数中,我想返回一个过滤后的
a
列表,该列表将删除列表
b
中的所有项目。其工作原理如下:

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

或:

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

我编写了以下代码:

def array_diff(a, b):
    for i in a:
        if i in b:
            a.remove(i)      
    return a
但是,即使我没有收到任何错误,当我尝试运行此函数时,列表
a
有两个值相同的项,并且它出现在列表
b
中,它也无法正确过滤它。我不知道为什么会发生这种情况,但我已经尝试过使用
a.pop(I)
,但也没有成功。我还尝试使用
对范围内的I(len(a))
迭代列表,但出现错误,说我遍历了列表的索引


希望你能帮助我,谢谢

使用
filter
功能过滤掉两个列表中的任何项目,如下所示:

def数组_diff(a,b):
返回列表(筛选器(lambda项:不在ls2、ls1中的项))
ls1=[1,2,3,4,5]
ls2=[2,5]
打印(数组_diff(ls1、ls2))

有一种更简单的方法 例如


如果只需要唯一值,则:

def array_diff(a, b):     
    return set(a) - set(b)

迭代时不要删除元素。
它不能正确过滤它。
。请解释,给出一个最小的可重复的例子这是否回答了你的问题?S可能会使这更容易。@ AAALX123这里:<代码> A是[1,2,2],B是[ 2 ],预期[1 ]:[ 1, 2 ]应该等于[1 ] < /Cord>这将删除列表A中的不在列表B中的重复作为WelLoh是的,我没有考虑,我会很快编辑它。嘿!这不起作用…@JohnRayburn“不起作用”是对它如何不起作用的有用描述。@superbrain,这没有给出任何错误,但所有的输出都是错误的。@JohnRayburn“不起作用”是什么意思?@busfighter我在前面的评论中回答了这个问题。谢谢
def array_diff(a, b):     
    return set(a) - set(b)