Pythonでリストから少なくともk回出現する要素を検索するプログラム
Pythonでは、要素のリスト nums と整数値 k が与えられたとき、「少なくともk回出現している要素」だけを取り出したい場面があります。これはデータ分析やログ処理など、頻度に基づくフィルタリングを行う際によく使われるテクニックです。
問題の概要
たとえば、次のような入力があったとします。
nums = [2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1]
k = 3
この場合、3回以上出現している要素は [2, 5, 6, 3] となります。
- 2 → 3回出現
- 5 → 3回出現
- 6 → 3回出現
- 3 → 3回出現
解決のアプローチ
この問題は、次の手順で解くことができます。
c:= リストnums内の各要素の出現回数を記録した辞書(カウンター)を作成するres:= 結果を格納するための新しい空リストを用意するc内の各キーnについて以下を繰り返す- もし
c[n] >= kならば、nをresの末尾に追加する
- もし
resを返す
実装例
Pythonの標準ライブラリ collections.Counter を使うと、出現回数の集計が非常に簡単に行えます。以下が具体的な実装です。
from collections import Counter
def solve(nums, k):
c = Counter(nums)
res = []
for n in c:
if c[n] >= k:
res.append(n)
return res
nums = [2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1]
k = 3
print(solve(nums, k))
入力
[2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1], 3
出力
[2, 5, 6, 3]
コードのポイント
Counter は、リストやイテラブルなオブジェクトを受け取ると、各要素の出現回数を自動的に集計してくれる便利なクラスです。これにより、自分でループを回して辞書を更新する手間が省けます。
また、計算量はリストの長さをNとしたとき O(N) で済むため、大規模なデータでも効率的に動作します。条件判定には c[n] >= k を使い、閾値以上の出現回数を持つ要素のみを結果リストに追加しています。
なお、Python 3.7以降では辞書が挿入順を保持するため、このコードの出力順序は元のリストで最初に出現した順になります。順序を気にしない場合は、そのまま利用できます。
-
リスト内の要素の合計を求めるPythonプログラム
この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()
-
PythonでリストからN個の最大要素を取得する方法
整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):