-3

2 つのリストがあります。detect私は関数を書く必要があります

項目が list_b に存在するかどうかを確認するための「for item in list_a」ループ。

どうすればこれを行うことができますか?適切なキーワードがないと何も見つかりません。

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を返すことでした。変更されたバージョンは、両方のリストで何かが見つかるまで続行するか、最初のリストのすべてをチェックした後にのみ戻ります。TrueFalseFalse

set関数を頻繁に呼び出す場合は、リストの一方または両方の代わりにsを作成して使用することで最適化できます。これは、in演算子がでよりもはるかに高速に動作するsetためlistです。ただし、リストをセットに変換するとオーバーヘッドが発生するため、努力する価値がない場合があります。

于 2012-12-16T12:34:13.957 に答える