繁体   English   中英

在 Python 的列表中查找缺失的元素

[英]Finding missing element in a list in Python

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

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

预期的 output 是

[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))

这将完成工作:

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

这就是您的代码失败的原因:

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

J=[i for i in J10 if i not in J2]
J=[i for i in J10 if i not in J2]
print(set(J2).symmetric_difference(J10))

您的代码不起作用,因为它被解析为:

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

J10 not in J2返回您无法迭代的 boolean 值。 您缺少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相交。

试试这个方法..

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM