Pythonでリスト内のサブリストの出現回数をカウントする方法
Pythonであるリストの中に、特定のサブリスト(連続する要素の並び)が何回出現するかを調べたい場合があります。そんなときは、リスト内包表記とlenメソッド、そしてif条件を組み合わせることで、シンプルに実装できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = [23, 33, 45, 67, 54 , 43, 33, 45, 67, 83, 33, 45, 67,90, 0]
print("The list is : " )
print(my_list)
sub_list = [33, 45, 67, 90]
print("The sub-list is : " )
print(sub_list)
my_result = len([sub_list for index in range(len(my_list)) if my_list[index : index + len(sub_list)] == sub_list])
print("The resultant list is : ")
print(my_result)実行結果
The list is : [23, 33, 45, 67, 54, 43, 33, 45, 67, 83, 33, 45, 67, 90, 0] The sub-list is : [33, 45, 67, 90] The resultant list is : 1
コードの解説
まず、整数のリスト
my_listを定義し、コンソールに表示します。次に、検索対象となるサブリスト
sub_listを定義し、こちらもコンソールに表示します。リスト内包表記を使って元のリストを先頭から順に走査し、各インデックスに対してif条件で判定を行います。
条件では、現在のインデックスからサブリストの長さ分だけスライスした要素列(
my_list[index : index + len(sub_list)])が、サブリストと完全に一致するかどうかをチェックしています。一致した場合のみ、そのサブリストが新しいリストに追加され、最終的に変数に代入されます。
このリストの長さを
len()で取得することで、サブリストの出現回数が求まり、結果としてコンソールに出力されます。
補足ポイント
この手法は連続する要素の並び(部分列)を正確に検出できるのが特徴です。単一の要素の出現回数であれば list.count() メソッドで簡単に求められますが、複数要素からなるパターンを数える場合は、上記のようにスライスと比較を組み合わせる方法が有効です。また、リストが非常に大きい場合は、ループ処理の範囲を range(len(my_list) - len(sub_list) + 1) に限定すると、無駄な比較を減らしてパフォーマンスを向上させることができます。
-
Pythonでリストのリストの各位置における指定文字の出現頻度を求める方法
リストを要素として持つリスト(ネストされたリスト)を扱う場面を考えてみましょう。ここでは、内側のリストの各位置において、特定の文字が何回出現するかを調べる方法を解説します。 例として、次のようなリストのリストを考えます。 listA = [[a, a, b], [a, c, b], [c, a, b], [c, a, a]] このリストでは、各要素が3つの要素を持つリストになっています。たとえば最初の内側のリストは、位置0、1、2にそれぞれ「a」「a」「b」が格納されています。同様に3番目のリストは、同じく位置0、1、2に「c」「a」「b」が入っています。すべての内側のリストを通して見ると、「
-
Pythonでリスト内の最頻値(最も頻度の高い要素)を取得する方法
統計データ分析では、与えられた値のリストの中から最も多く出現する値(最頻値)を特定する場面がよくあります。Pythonには、このような要素を簡単に求めるための方法が複数用意されています。本記事では、代表的な2つのアプローチ——collections.Counterとstatistics.mode——を、サンプルコード付きで解説します。 方法1:collections.Counterを使う collectionsモジュールのCounterクラスには、リスト内で最も出現回数の多い要素を直接取得できるmost_common()メソッドが用意されています。引数に1を渡せば最頻出の要素1つだけを、2を