检查列表是否包含其他列表中的所有项目

时间:2015-02-17 17:24:25

标签: python

检查元组列表是否包含另一个列表所具有的所有元组的最简单/最快方法是什么。例如:

t1 = [ (1,2), (3,4), (5,6), (7,8), (9,10), (11,12) ]
t2 = [ (3,4), (11,12) ]

将是一个真实的情况,因为t1包含t2中的所有元组。我试过像:

[i for e in t2 for i in t1 if e in i]
sorted(t1) == sorted(t2)

但这似乎总是回归真实。还有更好的方法吗?

3 个答案:

答案 0 :(得分:16)

您可以使用set s

t1 = [ (1,2), (3,4), (5,6), (7,8), (9,10), (11,12) ]
t2 = [ (3,4), (11,12) ]
set(t2).issubset(t1)
# returns true

# or equivalent use '<=' so
set(t2) <= set(t1)
# returns true

答案 1 :(得分:5)

为简单起见,您可以这样做:

print all(x in t1 for x in t2)

然而,这将在t1中搜索t2中的每个元素。如果t1在这种情况下很小,那可能无关紧要,但为了允许更大的集合,我会这样做:

s1 = set(t1)
print all(x in s1 for x in t2)

或者这个:

print set(t1).issuperset(t2)

这通常会更快,因为in对于集合比对大型列表要快得多。将t2转换为集合没有主要的性能优势,无论大小如何,所以我不会。

与往常一样,如果您在“正确”的集合中开始使用数据,那就更好了。因此,如果t1的主要目的是在其中查找内容,请首先使用set而不是列表。

答案 2 :(得分:2)

您可以从这些列表中创建set并使用issubset方法:

>>> t1 = [ (1,2), (3,4), (5,6), (7,8), (9,10), (11,12) ]
>>> t2 = [ (3,4), (11,12) ]
>>> s1 = set(t1)
>>> s2 = set(t2)
>>> s2.issubset(s1)
True