簡體   English   中英

這個列表理解有什么問題?

[英]What's wrong with this list comprehension?

我有listA=[[0,1],[1,2]]listB=[[0,1,2],[0,1,3],[0,2,3],[0,2,4]] 我想從listB中找到所有元素b,使得b⊆a不成立並且a⊆b對於listA中的所有元素a都不成立。 換句話說,我想要的 output 是: listC=[[0,2,3],[0,2,4]]

我嘗試了以下代碼:

import numpy as np

listA=[[0,1],[1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3],[0,2,4]]

listC=[b for b in listB if (((not set(a).issubset(set(b))) and (not set(b).issubset(set(a)))) for a in listA)]
print(listC)

但是, output 是[[0,1,2],[0,1,3],[0,2,3],[0,2,4]] ,這不是我想要的。 我的猜測是列表理解的 if 部分有問題。 怎么可能修好? 謝謝。

你的情況有點不穩定。 您希望listB中的元素不是listA中任何元素的超集(或子集)。 所以如果你更換

(((not set(a).issubset(set(b))) and (not set(b).issubset(set(a)))) for a in listA)

any(set(a).issubset(b) or set(b).issubset(a) for a in listA)

它將按預期工作。

listC = [b for b in listB if not any(set(a).issubset(b) or set(b).issubset(a) for a in listA)]

Output:

[[0, 2, 3], [0, 2, 4]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM