私はPythonでリストのリストを持っています。以下に示すように、サブリストの 1 つに項目が含まれているかどうかを確認したいと考えています。次の試行は失敗します。独自の for ループを作成せずに、簡単な方法を知っている人はいますか?
>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> 2 in a
期待してTrue
たけどリターンはFalse
>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> any(2 in i for i in a)
True
ある種のループなしでテストを行う方法はないと思います。
for
サブリスト内のオブジェクトを明示的にチェックする単純なループを使用する関数を次に示します。
def sublist_contains(lst, obj):
for item in lst:
try:
if obj in item:
return True
except TypeError:
pass
return False
もちろん、オブジェクトが最上位のリストにあるかどうかはテストされません。また、ネストのレベルが複数ある場合も機能しません。組み込み関数に渡されるジェネレーター式にループを配置する再帰を使用した、より一般的なソリューションを次に示しますany
。
def nested_contains(lst, obj):
return any(item == obj or
isinstance(item, list) and nested_contains(item, obj)
for item in lst)
これを行う簡単な方法は次のとおりです。
a = [[1,2],[3,4],[5,6],7,8,9]
result = [2 in i for i in a]
True in result --> True