Pythonでパーセント範囲内の要素頻度を求める方法
リスト内の要素について、その出現頻度(割合)が指定したパーセント範囲に収まっているかどうかを調べたいケースはよくあります。Pythonでは、標準ライブラリの「collections.Counter」とシンプルな反復処理を組み合わせることで、この問題を効率的に解決できます。
サンプルコード
以下に具体的な実装例を示します。
from collections import Counter
my_list = [56, 34, 78, 90, 11, 23, 6, 56, 79, 90]
print("The list is :")
print(my_list)
start, end = 13, 60
my_freq = dict(Counter(my_list))
my_result = []
for element in set(my_list):
percent = (my_freq[element] / len(my_list)) * 100
if percent >= start and percent <= end:
my_result.append(element)
print("The result is : ")
print(my_result)
実行結果
The list is : [56, 34, 78, 90, 11, 23, 6, 56, 79, 90] The result is : [56, 90]
コードの解説
まず、必要なモジュール(collectionsからCounter)を環境にインポートします。
整数のリストを定義し、コンソールに表示します。この例では10個の要素を持つリストを使用しています。
判定条件となるパーセント範囲の開始値(start)と終了値(end)を定義します。ここでは13〜60%としています。
Counterを使ってリスト内の各要素の出現回数を数え、辞書形式に変換して変数に代入します。
条件を満たす要素を格納するための空のリストを用意します。
set()で重複を取り除いた要素に対して反復処理を行い、「出現回数 ÷ リストの全要素数 × 100」で各要素の出現割合(パーセンテージ)を計算します。
計算した割合がstart以上かつend以下であれば、その要素を結果リストに追加します。
最後に、条件を満たした要素のリストをコンソールに出力します。
たとえば、リスト全体が10個の要素で構成されている場合、ある要素が2回出現していればその出現割合は20%になります。上記の例では、56と90がそれぞれ2回出現しているため20%となり、指定範囲13〜60%に該当するため結果として出力されています。
-
Pythonでリストから指定したインデックスの複数要素を削除する方法
Pythonのリストから単一の要素を削除するのは、del文とインデックスを組み合わせれば簡単に行えます。しかし、複数のインデックスに該当する要素をまとめて削除したいケースでは、少し工夫が必要です。本記事では、削除対象となるインデックスのリストを指定して、元のリストから該当する要素だけを取り除く方法を2つ紹介します。方法1:sorted()とdelを組み合わせるこのアプローチでは、まず削除したい位置(インデックス)を格納したリストを作成します。その後、降順にソートしてから後ろの要素から順に削除することで、削除処理中にインデックスがずれる問題を回避し、元のリストの構造を保ったまま安全に要素を削除で
-
Pythonでリストの交互範囲スライスを行う方法|range()・enumerate()の活用
スライシングは、Pythonでリストのデータを分析する際に非常によく使われる基本的な手法です。しかし、分析の目的によっては、特定の範囲の値に基づいてリストを部分的に切り出す必要があります。たとえば、「4つの要素をスキップし、その次の4つの要素を取り出す」という処理を繰り返したい場合などが挙げられます。本記事では、Pythonでこのような交互範囲スライス(alternate range slicing)を実現する方法を、2つのアプローチで解説します。 方法1:range()とlen()を組み合わせる まず、forループでリスト全体の長さ分だけインデックスを走査し、割り算の判定条件を満たす要素だ