检查元组列表是否是anoth的子集

2024-10-04 07:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,请注意,我已经讨论了其他列表子集问题,它们与我这里的问题无关。在

我有两张单子

>>> l1 = [[(7, -1, 'VBD', 'null', -1, 'looked', 'looked'), (8, 7, 'JJ', 'xcomp', -1, 'shocked', 'shocked')]]
>>>
>>> l2 = [(7, -1, 'VBD', 'null', -1, 'looked', 'looked'), (8, 7, 'JJ', 'xcomp', -1, 'shocked', 'shocked'), (9, 8, 'CC', 'cc', -1, 'and', 'and'), (10, 7, 'JJ', 'xcomp', -1, 'angry', 'angry')]

我在检查一个是否是另一个的子集。在

但在此之前,我检查了从一个列表中减去另一个列表的结果,结果令人失望-

^{pr2}$

为什么我得到的结果是一样的? 这和它们是元组这一事实有关吗?在


Tags: andl1列表null子集单子ccl2
3条回答

只需使用集合和<;=运算符(是的子集)。在

>>> l1 = [2,4,6,8]
>>> l2 = [2,4,6,8,10]
>>> set(l1) <= set(l2)
True

问题是l1是一个元组列表(即[[tuple]]),而l2是一个元组列表(即[tuple])。如果您更改此选项,则列表理解的输出是您所期望的:

l1 = [(7, -1, 'VBD', 'null', -1, 'looked', 'looked'), (8, 7, 'JJ', 'xcomp', -1, 'shocked', 'shocked')]
l2 = [(7, -1, 'VBD', 'null', -1, 'looked', 'looked'), (8, 7, 'JJ', 'xcomp', -1, 'shocked', 'shocked'), (9, 8, 'CC', 'cc', -1, 'and', 'and'), (10, 7, 'JJ', 'xcomp', -1, 'angry', 'angry')]
​
a = [word for word in l1 if word not in l2]
b = [word for word in l2 if word not in l1]
​
print a
print b

[]
[(9, 8, 'CC', 'cc', -1, 'and', 'and'), (10, 7, 'JJ', 'xcomp', -1, 'angry', 'angry')]

使用^{}

l1 = [(7, -1, 'VBD', 'null', -1, 'looked', 'looked'), (8, 7, 'JJ', 'xcomp', -1, 'shocked', 'shocked')]
l2 = [(7, -1, 'VBD', 'null', -1, 'looked', 'looked'), (8, 7, 'JJ', 'xcomp', -1, 'shocked', 'shocked'), (9, 8, 'CC', 'cc', -1, 'and', 'and'), (10, 7, 'JJ', 'xcomp', -1, 'angry', 'angry')]

>>> set(l1).issubset(l2)
True

相关问题 更多 >