这个列表理解有什么问题?

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 成立。换句话说,我想要的输出是: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)

然而,输出是[[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)]

输出:

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