如果列表中的项目a在列表中b

时间:2012-12-16 09:47:28

标签: python list python-2.7

我有两个清单。我需要编写一个函数detect

  

用于list_a'循环中的项目以检查该项目是否存在于list_b中。

我该怎么做呢? 如果没有合适的关键字,我找不到任何内容!

list_a = ["Q", "W", "E"]
list_b = ["Q", "D", "E"]

def detect(item):
    return

detect(list_a[0])  
>>True
detect(list_a[1])
>>False

我试过了:

for item in list_a:
    if item in list_b:
        return True
    else:
        return False

3 个答案:

答案 0 :(得分:6)

>>> set_b = set(["Q", "D", "E"])
>>> set_a = set(["Q", "W", "E"])
>>> set_a.intersection(set_b)
set(['Q', 'E'])
>>> 'Q' in set_a.intersection(set_b)
True
>>> '42' in set_a.intersection(set_b)
False

答案 1 :(得分:2)

要检查项目是否在列表中,您可以使用in运算符: -

"Q" in ["Q", "W", "R"]
>> True

现在,对于list_a中的每个项目,请检查它是否在list_b中。这将给你想要的结果。

答案 2 :(得分:1)

你尝试的几乎是正确的。这是一个更正版本:

def detect(item, list_a, list_b):
    for item in list_a:
        if item in list_b:
            return True
    return False  # not found

您的版本存在的问题是它只检查了list_a中的第一项,并返回了TrueFalse值。修改后的版本会继续运行,直到在两个列表中找到某些内容,或者只有在检查了第一个列表中的所有内容后才返回False

如果您要调用该函数,可以通过创建和使用set而不是一个或两个列表来优化它,因为in运算符的运行速度更快set而不是list。但是,将列表转换为set会产生一些开销,因此可能不值得付出努力。