首页 > 解决方案 > 要从另一个列表中找到的列表中删除一个值?

问题描述

在 python 中, remove() 应该删除列表中第一次出现的值。我尝试了下面的代码,但是它并没有从列表 a 中删除在列表 b 中找到的所有值。我的代码有什么问题吗?

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

例如,当它只应该打印 [1, 3] 时,它会打印出 [1, 2, 3]

print(array_diff([1,2,2,2,3],[2]))
> [1, 2, 3]

附加说明:我知道一个较短的版本(如下所示)可以正常工作,但我想知道我上面的代码有什么问题?谢谢!!!

def array_diff(a, b):
    a = list(i for i in a if i not in b)
    return a

标签: python

解决方案


我决定不删除只是为您返回新列表:

def array_diff(a,b):
    new = []
    for i in a:
        if i not in b:
            new.append(i)
    return new


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


def array_diff2(a,b):
    return [i for i in a if i not in b]


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



推荐阅读