如何从列表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