检查元组列表是否包含另一个列表所具有的所有元组的最简单/最快方法是什么.例如:
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)
为简单起见,您可以这样做:
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而不是列表.