簡體   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