Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列内に最も多く出現する文字とその出現回数を求める方法

この記事では、文字列の中で最も多く出現する文字と、その出現回数を求める方法について、考え方と実装手順をわかりやすく解説します。

問題文

入力として与えられた文字列から、最も多く出現する文字と、その出現回数を特定します。

アプローチ

  • Python標準ライブラリの collections.Counter を使い、「文字をキー・出現回数を値」とする辞書を作成します。

  • 辞書の値(出現回数)の中から最大値を求め、その最大値に対応する文字を取得します。

それでは、実際の実装例を見ていきましょう。

実装例

from collections import Counter

def find(input_):
    # 文字をキー、出現回数を値とする辞書を作成
    wc = Counter(input_)
    # 最大の出現回数を取得
    s = max(wc.values())
    # 最大出現回数を持つ文字を取得
    result = [(char, cnt) for char, cnt in wc.items() if cnt == s]
    print(result[0])

# ドライバープログラム
if __name__ == "__main__":
    input_ = 'tutorialspoint'
    find(input_)

出力

('t', 3)

このプログラムでは、まず Counter によって各文字の出現回数が集計されます。次に max() で最大の出現回数を求め、内包表記を使ってその回数に一致する文字を取り出しています。処理全体の計算量は文字列の長さを n とすると O(n) であり、非常に効率的です。

別の方法:most_common() を活用する

Counter には、出現回数の多い順に要素を取得できる most_common() メソッドが用意されています。これを使うと、より簡潔に記述できます。

from collections import Counter

def find(input_):
    wc = Counter(input_)
    # 出現回数が最も多い(文字, 回数)のペアを取得
    char, count = wc.most_common(1)[0]
    print(f"'{char}' が {count} 回出現します")

input_ = 'tutorialspoint'
find(input_)
't' が 3 回出現します

なお、同じ最大回数の文字が複数存在する場合、most_common() は先に出現した文字を優先して返す点に注意してください。

まとめ

この記事では、Pythonの Counter を使って、文字列内で最も多く出現する文字とその出現回数を求める方法を学びました。max() と辞書操作を組み合わせる方法と、most_common() を使う方法の2つのアプローチを紹介しましたので、用途に応じて使い分けてください。

  1. Pythonで文字列内に最も多く出現する文字とその出現回数を求める方法

    この記事では、文字列の中で最も多く出現する文字と、その出現回数を求める方法について、考え方と実装手順をわかりやすく解説します。 問題文 入力として与えられた文字列から、最も多く出現する文字と、その出現回数を特定します。 アプローチ Python標準ライブラリの collections.Counter を使い、「文字をキー・出現回数を値」とする辞書を作成します。 辞書の値(出現回数)の中から最大値を求め、その最大値に対応する文字を取得します。 それでは、実際の実装例を見ていきましょう。 実装例 from collections import Counter def find(input_)

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に