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)
-
Pythonで文字列から特殊文字・句読点・空白をすべて削除する方法
Pythonで文字列に含まれる特殊文字、句読点、空白などをまとめて削除したい場合、いくつかの簡単な方法があります。ここでは代表的な2つのアプローチを紹介します。 方法1:内包表記とisalnum()を使う 文字列を1文字ずつ反復処理し、isalnum()メソッドで英数字のみを抽出する方法です。isalnum()は、その文字がアルファベットまたは数字であればTrueを返すため、それ以外の記号や空白は自動的に除外されます。 >>> string = Hello $#! People Whitespace 7331 >>> .join(e fo
-
Pythonで文字列から文字を削除する方法|スライス・replace・正規表現の使い分け
Pythonで文字列から特定の文字を削除したい場面はよくあります。目的に応じていくつかの方法があるため、それぞれの特徴と使い方を解説します。 特定のインデックスの文字を削除する(スライス) 文字列の中から指定した位置(インデックス)の1文字だけを削除したい場合は、文字列スライスを使うのが最もシンプルです。削除したい位置の前後をつなぎ合わせることで、その文字だけを取り除いた新しい文字列を作成できます。 >>> s = Hello World >>> s[:4] + s[5:] Hell World この例では、インデックス4にある「o」を除外し、それ以外の部