查找Python列表中缺失的元素



我有两个列表J2J10。我试图找到J10中不存在的J2元素,但我得到了一个错误。我给出了预期的输出。

J2=[128, 4, 6, 7, 8, 9, 10]
J10=[4, 6, 7, 8, 9, 10, 13, 128]
J=[i for i in J10 not in J2]
print(J)

错误是

in <module>
J=[i for i in J10 not in J2]
TypeError: 'bool' object is not iterable

期望输出为

[13]
J=[i for i in J10 if i not in J2]

或:

lst=[]
for i in J10:
if i not in J2:
lst.append(i)
#[13]

set(J10)-(set(J2))
J=[i for i in J10 if i not in J2]

这就行了:

temp = list(filter(lambda x: x not in J2, J10))
print(temp)

下面是你的代码失败的原因:

J10 not in J2被视为检查J10(作为一个整体)是否在J2中的表达式。换句话说,J10 not in J2将为True或False,并且由于布尔值不是类似于存储的元素,例如列表,因此您不能迭代它。如果您想解决您正在尝试的语法问题,您应该使用:

J=[i for i in J10 if i not in J2]

试试这个…

J2=[128, 4, 6, 7, 8, 9, 10]
J10=[4, 6, 7, 8, 9, 10, 13, 128]
J=list(set(J10).difference(J2))
print(J)
print(set(J2).symmetric_difference(J10))

你的代码不能工作,因为它被解析为:

[i for i in (J10 not in J2)]

J10 not in J2返回一个不能迭代的布尔值。您缺少一个if

[i for i in J10 if i not in J2]

集合在这里可能很有用,因为成员检查是否为O(len(J2)),并且外部循环是否为O(len(J10)),这使得这种方法可能非常昂贵。

>>> set(J10) ^ set(J2) & set(J10)
{13}

首先我们找到每个集合唯一的项集合。为了确保这只包含J10的唯一元素,我们然后与J10相交。

最新更新