这个列表理解有什么问题?
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]]
我有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]]