如何在Python 3中移除一个列表中存在于另一个列表中的所有项?[duplicate]

xdyibdwo  于 2023-01-24  发布在  Python
关注(0)|答案(3)|浏览(120)
    • 此问题在此处已有答案**:

(13个答案)
Strange result when removing item from a list while iterating over it(8个答案)
两年前关闭了。
我试着写一个函数,它接受两个列表作为输入:def array_diff(a, b):。在这个函数中,我想返回一个过滤过的a列表,它已经移除了列表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

但是,即使我没有得到错误,当我尝试运行这个函数时,列表a有两个值相同的项,并且它出现在列表b中,它也不能正确地过滤它。我不知道为什么会发生这种情况,但我已经尝试过使用a.pop(i),但也没有工作。我还尝试过使用for i in range(len(a))迭代列表,但是我收到错误消息说我检查了列表的索引。
希望你能帮助我,谢谢!

szqfcxe2

szqfcxe21#

使用列表解析创建一个新列表,其中包含a中所有不在b中的项,如下所示:

def array_diff(a, b):
    return [item for item in a if item not in b]

ls1 = [1, 2, 3, 4, 5]
ls2 = [2, 5]

print(array_diff(ls1, ls2))  # should be [1, 3, 4]
print(array_diff(ls2, ls1))  # should be []

或者,可以使用filter函数过滤掉a中同时存在于b中的任何项。

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

ls1 = [1, 2, 3, 4, 5]
ls2 = [2, 5]

print(array_diff(ls1, ls2))  # should be [1, 3, 4]
print(array_diff(ls2, ls1))  # should be []
mwg9r5ms

mwg9r5ms2#

有一种更简单的方法例如,

a = [1,2,2,2,2,3]
b = [2]
c = list(set(a)-set(b)) # for output in list
print(c)
sr4lhrrt

sr4lhrrt3#

如果只需要唯一值,则:

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

相关问题