Pythonでリスト内の各要素の出現回数をサブリストとして作成する方法
Pythonでは、数値を要素とするリストを扱う際に、同じ値が複数回出現することがよくあります。この記事では、リスト内の各要素とその出現回数(頻度)をペアにしたサブリストを作成する方法を、2つのアプローチで解説します。
方法1:forループとappendを使う
まずは基本的な方法です。リスト内の各要素について、それ以降のすべての要素と比較し、一致するものがあればカウントを増やしていきます。最終的に「要素」と「その出現回数」を組み合わせたサブリストのリストを作成します。
コード例
def occurrences(list_in):
result = []
checked = []
for i in range(0, len(list_in)):
# すでに処理済みの要素はスキップ
if list_in[i] not in checked:
count = 0
for j in range(0, len(list_in)):
# 両位置の要素が一致したらカウントアップ
if list_in[i] == list_in[j]:
count += 1
checked.append(list_in[i])
result.append([list_in[i], count])
return result
# 呼び出し側のコード
listA = [13, 65, 78, 13, 12, 13, 65]
print("リスト内の各要素の出現回数:\n")
print(occurrences(listA))
実行結果
上記のコードを実行すると、次のような結果が得られます。
リスト内の各要素の出現回数: [[13, 3], [65, 2], [78, 1], [12, 1]]
この結果から、「13」は3回、「65」は2回、「78」と「12」はそれぞれ1回出現していることがわかります。なお、この方法は二重ループを使用するため、計算量はO(n²)となり、大きなリストでは処理に時間がかかる点に注意が必要です。
方法2:Counterを使う
より効率的なのが、標準ライブラリのcollectionsモジュールに含まれるCounterクラスを使う方法です。Counterはリスト内の全要素の出現回数を自動的に集計してくれるため、コードがシンプルになり、パフォーマンスも向上します。
コード例
from collections import Counter
def occurrences(list_in):
c = Counter(list_in)
new_list = []
for k, v in c.items():
new_list.append([k, v])
return new_list
listA = [13, 65, 78, 13, 12, 13, 65]
print("リスト内の各要素の出現回数:\n")
print(occurrences(listA))
実行結果
リスト内の各要素の出現回数: [[13, 3], [65, 2], [78, 1], [12, 1]]
Counterは内部でハッシュテーブルを使用しているため、計算量はO(n)となり、リストが大きくなるほどforループ方式との差が顕著になります。
まとめ
リスト内の要素の出現回数を調べるには、以下の2つの方法があります。
- forループとappend: 標準的な構文だけで実装でき、ロジックを細かく制御できる一方、計算量がO(n²)と大きい。
- collections.Counter: コードが簡潔で高速(O(n))。特別な理由がない限り、こちらの使用が推奨されます。
どちらの方法も同じ結果が得られますので、データサイズや可読性の要件に応じて使い分けるとよいでしょう。
-
Pythonのリストにインデックスを使って要素を追加する方法
Pythonのリスト(list)は、順序付けられており変更可能なコレクション型データです。重複した要素も許容するため、Pythonプログラムで最も頻繁に使われるデータ型の一つとなっています。本記事では、インデックス機能を活用してリストに要素を追加する方法を解説します。要素を追加する前に、まずインデックスを使ってリスト内の要素にアクセスする基本的な方法を確認しておきましょう。インデックスを使ったリスト要素へのアクセスリスト内のすべての要素にはインデックスが割り当てられており、これによって要素の順序が保たれています。インデックスを指定することで、任意の位置にある要素へアクセスできます。スライス表記
-
【Python入門】リスト内で2番目に大きい数値を見つける3つの方法
はじめに この記事では、Pythonを使ってリスト内の2番目に大きい数値(次に大きい値)を見つける方法を、3つの異なるアプローチで解説します。初心者にもわかりやすいように、各手法の考え方・サンプルコード・実行結果を順番に紹介していきます。 問題の定義 問題: 与えられたリストの中から、2番目に大きい数値を求めて表示してください。 例えば [11, 22, 1, 2, 5, 67, 21, 32] というリストが与えられた場合、最大値は67なので、答えは 32 となります。 アプローチ1:set()関数とremove()関数を使う方法 まず、set() を使ってリストから重複する要素を取り除