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



我有listA=[[0,1],[1,2]]listB=[[0,1,2],[0,1,3],[0,2,3],[0,2,4]]。我想从listB中找到所有元素b,这样对于listA中的所有元素a,b⊆a不成立,a \8838b不成立。换句话说,我想要的输出是: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]]

相关内容

  • 没有找到相关文章

最新更新