8

私はPythonでリストのリストを持っています。以下に示すように、サブリストの 1 つに項目が含まれているかどうかを確認したいと考えています。次の試行は失敗します。独自の for ループを作成せずに、簡単な方法を知っている人はいますか?

>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> 2 in a

期待してTrueたけどリターンはFalse

4

4 に答える 4

17
>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> any(2 in i for i in a)
True
于 2012-12-05T19:11:15.270 に答える
-1

ある種のループなしでテストを行う方法はないと思います。

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)
于 2012-12-05T19:03:14.530 に答える
-1

これを行う簡単な方法は次のとおりです。

  a = [[1,2],[3,4],[5,6],7,8,9]
  result = [2 in i for i in a]

  True in result --> True
于 2012-12-05T19:09:04.740 に答える