如何从列表a中减去列表b中项目的每个实例

所以我在 Python 中有以下两个列表:

a = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
b = [2, 4]

我想创建一个这样的函数:

x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
y = [2, 4]

def array_diff(a, b):
    # CODE HERE

print(array_diff(x, y))   # Output = [1, 3, 3, 3]

我最初尝试过这个解决方案:

def array_diff(a, b):
    for item in a:
        for i in range(len(b)):
            if b[i] == item:
                a.remove(b[i])
    return a

但此代码返回

[1, 2, 3, 3, 3, 4, 4]

我尝试更改代码,但没有成功。我尝试在这里找到解决方案,但没有任何反应。

回答

您可以使用列表理解:

x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
y = [2, 4]

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

print(array_diff(x, y))

输出:

[1, 3, 3, 3]

如果您将array_diff通过迭代(不超过)一次来使用它,如下所示:

for i in array_diff:
    print(i)

您可以使用yield关键字提高效率 b :

x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
y = [2, 4]

def array_diff(a, b):
    for i in a:
        if i not in b:
            yield i

for i in array_diff(x, y):
    print(i)

输出:

1
3
3
3


以上是如何从列表a中减去列表b中项目的每个实例的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>