-3

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

一个“for item in 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
4

3 回答 3

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
于 2012-12-16T09:53:30.570 回答
2

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

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

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

于 2012-12-16T09:52:36.590 回答
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并返回了 aTrueFalse值。修改后的版本会一直运行,直到 if 在两个列表中都找到某些内容,或者False仅在检查了第一个列表中的所有内容后才返回。

如果您要经常调用该函数,可以通过创建和使用sets 而不是其中一个或两个列表来优化它,因为运算符在 a 上的工作速度比在 a 上in快得多。但是,将列表转换为集合会产生一些开销,因此可能不值得付出努力。setlist

于 2012-12-16T12:34:13.957 回答