ホームページ  >  記事  >  バックエンド開発  >  Python でサブリストが存在するかどうかを効率的に判断するにはどうすればよいですか?

Python でサブリストが存在するかどうかを効率的に判断するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 21:55:29145ブラウズ

 How to Efficiently Determine if a Sublist Exists in Python?

Python でのサブリストの存在の検出

当面の課題は、より大きなリスト内のサブリストの存在を検証する関数を考案することです。 2 つのリスト、1 つは大きなリスト (list1) として、もう 1 つは潜在的なサブリスト (list2) として与えられると、関数は list2 が実際に list1 のサブリストであるかどうかを判断する必要があります。

関数の実装

Python には、この目的に利用できる any() という多用途の関数が用意されています。次のコード スニペットは、any() を使用する関数を構築する方法を示しています。

<code class="python">def sublist_exists(lst, sublst):
    n = len(sublst)
    return any((sublst == lst[i:i+n]) for i in range(len(lst)-n+1))</code>

この関数は、要素を 1 つずつ反復処理することで、より大きなリスト (lst) を注意深くスキャンします。インデックス i の要素ごとに、長さ n の連続したサブリストを抽出し、それを潜在的なサブリスト (sublst) と比較します。一致が検出された場合、関数はすぐに True を返し、サブリストの存在を示します。このプロセスは、一致するものが見つかるか、より大きなリスト全体が使い尽くされるまで続きます。その場合、関数は False を返します。

パフォーマンスに関する考慮事項

注意することが重要です。この関数の時間計算量は O(m*n) であることがわかります。ここで、m は大きい方のリストの長さ、n は潜在的なサブリストの長さです。反復ごとに、関数はサブリスト比較演算を実行し、反復回数は m と n の差に 1 を加えたものによって制限されます。

使用例

見てみましょう提供された例で sublist_exists 関数の使用法を示します。

<code class="python">>>> sublist_exists([1,0,1,1,1,0,0], [1,1,1])
True

>>> sublist_exists([1,0,1,0,1,0,1], [1,1,1])
False</code>

最初の例では、[1,1,1] は確かに大きなリストのサブリストであるため、関数は True を返します。 2 番目の例では、[1,1,1] が大きいリストに表示されないため、関数は False を返します。

以上がPython でサブリストが存在するかどうかを効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。