[英]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.