我有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]]