[英]Finding missing element in a list in Python
我有兩個列表J2
和J10
。 我試圖在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.