我正在尝试比较三个不同的列表,每个列表的长度可能与其他列表不同,但我不确定如何执行此操作。最初我认为只是获得最大的列表长度,但后来意识到如果其他的更少,那么它将尝试找到空元素并返回错误。 我试图找出所有列表是否都有一个共同的元素
目前我有:
for i in range(n) //n is largest list length
if (listA[i] in listB) and (listA[i] in listC):
common = True
else:
common = False
如果可能的话,你能否给出一个可以应用于众多列表的答案,而不是限于三个
答案 0 :(得分:5)
您可以使用set intersection获取所有3个列表的所有常用元素:
intersection = set(listA) & set(listB) & set(listC)
common = bool(intersection) # True if not empty
对循环中两个列表的包含检查具有时间复杂度O(A*(B+C))
(二次)。这是O(A+B+C)
(线性)。
如果整个十字路口的信息超出您的需求,您仍然可以执行以下操作,并从早期休息中受益:
setBC = set(listB) & set(listC)
common = any(x in setBC for x in listA)