Python 检查列表是否包含其他列表中的所有项目
检查元组列表是否包含其他列表所包含的所有元组的最简单/最快方法是什么。例如:Python 检查列表是否包含其他列表中的所有项目,python,algorithm,Python,Algorithm,检查元组列表是否包含其他列表所包含的所有元组的最简单/最快方法是什么。例如: 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) 但这似乎总是回到了现实。有更好的方法吗?您可以从这些列表中创建se
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)
但这似乎总是回到了现实。有更好的方法吗?您可以从这些列表中创建
set
s,并使用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
您可以使用
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
t1=[(1,2)、(3,4)、(5,6)、(7,8)、(9,10)、(11,12)]
t2=[(3,4)、(11,12)]
设置(t2)。发布设置(t1)
#返回true
#或者使用“为简单起见,您可以这样做:
print all(x in t1 for x in t2)
s1 = set(t1)
print all(x in s1 for x in t2)
但是,它将在t1
中搜索t2
中的每个元素。当t1
像本例中那样小时,这可能无关紧要,但为了允许更大的集合,我会这样做:
print all(x in t1 for x in t2)
s1 = set(t1)
print all(x in s1 for x in t2)
或者这个:
print set(t1).issuperset(t2)
这通常会更快,因为
中的对于集合要比对于大型列表快得多。无论大小,将t2
转换为一个集合都不会带来主要的性能好处,所以我不会这么做
与往常一样,最好从“正确”的集合中获取数据。因此,如果t1
的主要目的是在其中查找内容,那么首先使用set
而不是列表。研究并使用小写的sets-set
s。