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

Lan*_*ait 12 python

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

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

将是一个真实的情况,因为t1包含t2中的所有元组.我尝试过类似的东西:

[i for e in t2 for i in t1 if e in i]
sorted(t1) == sorted(t2)
Run Code Online (Sandbox Code Playgroud)

但这似乎总是回归真实.有没有更好的办法?

Fin*_*inn 20

你可以使用sets

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
Run Code Online (Sandbox Code Playgroud)


Ste*_*sop 6

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

print all(x in t1 for x in t2)
Run Code Online (Sandbox Code Playgroud)

但是,这将搜索t1每个元素t2.t1在这种情况下,当小的时候可能并不重要,但是为了允许更大的集合,我会这样做:

s1 = set(t1)
print all(x in s1 for x in t2)
Run Code Online (Sandbox Code Playgroud)

或这个:

print set(t1).issuperset(t2)
Run Code Online (Sandbox Code Playgroud)

这通常会更快,因为in集合比大型列表快得多.t2无论大小如何,转换为集合都没有重大的性能优势,所以我不愿意.

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