我有两个列表J2
和J10
。我试图找到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
相交。