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

Pythonを使って文字列内の重複文字をすべて検出する方法


文字列がひとつ与えられます。ここでの課題は、その文字列の中から出現回数が2回以上の文字(重複文字)をすべて見つけ出すことです。

たとえば「Hello World. Let's learn Python」という文字列を例にすると、アルゴリズムは複数回出現している文字を検出します。この場合の出力は次のようになります。

e : 3
l : 4
o : 3
<空白> : 4
r : 2
t : 2
n : 2

この問題を実装するには、Pythonのcollectionsモジュールを使用します。collectionsからはCounter()クラスを利用できます。Counter()はハッシュ可能なオブジェクトの出現回数を数えるためのもので、今回のようにテキストを渡すと、文字ごとに切り分けて各文字を辞書のキーとして登録し、その出現回数を値として保持します。つまり、「文字=キー」「出現回数=値」という対応関係を持つ辞書が自動的に生成されるのです。

アルゴリズム

ステップ1:文字列からキーと値のペアを作成する。各文字がキーとなり、その出現回数が値となる。
ステップ2:各キーについて、値が1より大きいかどうかを確認する。
ステップ3:値が1より大きければそれは重複文字なので出力対象とし、そうでなければ無視する。

サンプルコード

from collections import Counter

def calc_char_freq(string):
    # 文字をキー、出現回数を値とする辞書を取得
    freq_count = Counter(string)
    for key in freq_count.keys():
        # 出現回数が1より大きい文字とその頻度を一覧表示
        if freq_count.get(key) > 1:
            print("(" + key + ", " + str(freq_count.get(key)) + ")")

myStr = 'Hello World. Let’s learn Python'
calc_char_freq(myStr)

実行結果

(e, 3)
(l, 4)
(o, 3)
( , 4)
(r, 2)
(t, 2)
(n, 2)
  1. Pythonで文字列から特殊文字・句読点・空白をすべて削除する方法

    Pythonで文字列に含まれる特殊文字、句読点、空白などをまとめて削除したい場合、いくつかの簡単な方法があります。ここでは代表的な2つのアプローチを紹介します。 方法1:内包表記とisalnum()を使う 文字列を1文字ずつ反復処理し、isalnum()メソッドで英数字のみを抽出する方法です。isalnum()は、その文字がアルファベットまたは数字であればTrueを返すため、それ以外の記号や空白は自動的に除外されます。 >>> string = Hello $#! People   Whitespace 7331 >>> .join(e fo

  2. Pythonで文字列から文字を削除する方法|スライス・replace・正規表現の使い分け

    Pythonで文字列から特定の文字を削除したい場面はよくあります。目的に応じていくつかの方法があるため、それぞれの特徴と使い方を解説します。 特定のインデックスの文字を削除する(スライス) 文字列の中から指定した位置(インデックス)の1文字だけを削除したい場合は、文字列スライスを使うのが最もシンプルです。削除したい位置の前後をつなぎ合わせることで、その文字だけを取り除いた新しい文字列を作成できます。 >>> s = Hello World >>> s[:4] + s[5:] Hell World この例では、インデックス4にある「o」を除外し、それ以外の部