Pythonで文字列内の各文字の出現頻度を数える3つの方法
テキスト処理は、機械学習やAIの分野において重要なテーマの一つとなっています。Pythonにはこの分野を支える便利なツールやライブラリが数多く用意されており、文字列の解析も簡単に行えます。本記事では、与えられた文字列に含まれる各文字の出現回数(頻度)を求める方法を、複数のアプローチから解説します。
方法1: collections.Counterを使う
標準ライブラリcollectionsのCounterクラスは、イテラブルなオブジェクト内の各要素の出現回数を自動的に集計してくれるクラスです。文字列をそのまま渡すだけで、各文字の頻度を持つ辞書風オブジェクトが得られるため、最もシンプルで推奨される方法です。
コード例
from collections import Counter
# 対象の文字列
strA = "timeofeffort"
print("元の文字列:", strA)
# Counterで各文字の出現回数をカウント
res = Counter(strA)
# 結果を表示
print("各文字の出現頻度:\n", res)
実行結果
元の文字列: timeofeffort
各文字の出現頻度:
Counter({'f': 3, 't': 2, 'e': 2, 'o': 2, 'i': 1, 'm': 1, 'r': 1})
Counterは出現回数の多い順に要素を保持するほか、most_common()メソッドを使えば上位N件の文字を簡単に取得できるのも魅力です。
方法2: 辞書とget()メソッドを使う
外部モジュールに頼らず、Pythonの基本構文だけで実装したい場合は、空の辞書とget()メソッドを組み合わせる方法が有効です。文字列をforループで1文字ずつ走査し、すでに登録されている文字はカウントを+1、初登場の文字は0からカウントを始めます。
コード例
# 対象の文字列
strA = "timeofeffort"
print("元の文字列:", strA)
# 辞書とget()で各文字の出現回数をカウント
res = {}
for ch in strA:
res[ch] = res.get(ch, 0) + 1
# 結果を表示
print("各文字の出現頻度:\n", res)
実行結果
元の文字列: timeofeffort
各文字の出現頻度:
{'t': 2, 'i': 1, 'm': 1, 'e': 2, 'o': 2, 'f': 3, 'r': 1}
res.get(ch, 0)は、キーchが存在しない場合にデフォルト値の0を返すため、if文による存在チェックが不要になり、コードがすっきりします。
方法3: setとcount()メソッドを使う
Pythonのsetは重複しない要素のみを格納するデータ構造です。この性質を利用すると、文字列をsetに変換することでユニークな文字だけを取り出し、それぞれの文字についてstr.count()で出現回数を数えられます。辞書内包表記と組み合わせれば、わずか1行で実装可能です。
コード例
# 対象の文字列
strA = "timeofeffort"
print("元の文字列:", strA)
# setとcount()で各文字の出現回数をカウント
res = {n: strA.count(n) for n in set(strA)}
# 結果を表示
print("各文字の出現頻度:\n", res)
実行結果
元の文字列: timeofeffort
各文字の出現頻度:
{'f': 3, 'r': 1, 'm': 1, 'o': 2, 'i': 1, 't': 2, 'e': 2}
なお、setは要素の順序を保持しないため、出力順序は実行環境によって異なる場合があります。順序が重要な場合はsorted()などで並べ替えてください。
まとめ
文字列内の各文字の頻度を数える方法として、以下の3つを紹介しました。
- collections.Counter: 最も簡潔で高機能。頻度分析ならまず第一候補。
- 辞書 + get(): 標準機能のみで動作し、ロジックが明快で学習向き。
- set + count(): ワンライナーで書ける手軽さが魅力。
用途や可読性の要件に応じて最適な方法を選択してください。特に大規模なテキストを扱う場合は、内部が最適化されたCounterがパフォーマンス面で有利です。
-
Pythonで文字列内の各単語の出現頻度をカウントする3つの方法
テキスト分析では、さまざまなアルゴリズムで処理を行うために、単語を数えて重み付けすることがよくあります。本記事では、与えられた文中の各単語の頻度(出現回数)を求める方法を紹介します。主に以下の3つのアプローチがあります。1. collectionsモジュールのCounterを使う方法標準ライブラリのcollectionsモジュールに含まれるCounter()を使うと、単語の頻度を簡単に取得できます。まずsplit()で文章を単語に分割し、その結果に対してmost_common()を適用することで、出現回数の多い順に並べたリストが得られます。コード例from collections import
-
Pythonで文字列内の単語を逆順に並べ替える方法
Pythonでは、split()メソッドとreversed()関数を組み合わせることで、文字列内のすべての単語を簡単に逆順にすることができます。この記事では、具体的な手順とサンプルコードを通じて、その実装方法を解説します。 やりたいこと まず、入力と出力のイメージをサンプルで確認しましょう。 入力: string = I am a python programmer 出力: programmer python a am I 別の例も見てみます。 入力: string = tutorialspoint is a educational website 出力: website educatio