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

Pythonで文字列内の重複文字をすべて検索する方法を解説

このチュートリアルでは、Pythonを使って文字列内に含まれるすべての重複文字を見つける方法を学びます。Pythonには複数のアプローチがあるので、それぞれ順番に見ていきましょう。

今回作成するプログラムの目的は、文字列の中に存在する重複した文字を抽出することです。例えば、文字列 tutorialspoint を入力すると、プログラムは t o i を出力します。つまり、文字列内で出現回数が2回以上の文字をすべて見つける、という処理になります。それでは始めましょう。

モジュールを使わずに書くプログラム

外部モジュールを一切使わず、Python標準の機能だけで目的を達成する方法を紹介します。まずは、count メソッドを使って文字列の重複文字を求める方法から見ていきましょう。処理の手順は以下の通りです。

  • 文字列を初期化する。
  • 空のリストを初期化する。
  • 文字列をループ処理し、count メソッドでその文字の出現頻度が1より大きいかどうかを確認する。
  • 1より大きい場合は、その文字がすでにリストに存在するかどうかを確認する。
  • リストに存在しなければ追加する。
  • 最後に結果の文字を出力する。

サンプルコード

## 文字列の初期化
string = "tutorialspoint"
## 重複文字を格納するためのリストを初期化
duplicates = []
for char in string:
    ## その文字が重複しているかどうかを確認
    ## str.count(char) は文字列内でのその文字の出現回数を返す
    if string.count(char) > 1:
        ## すでにリストに存在しない場合のみ追加
        if char not in duplicates:
            duplicates.append(char)
print(*duplicates)

上記のプログラムを実行すると、次のような結果が得られます。

出力

t o i

続いて、メソッドを一切使わずに文字列の重複文字を求める方法を紹介します。ここでは辞書(dict)型のデータ構造を活用して、目的の出力を得ます。まずは手順を確認しましょう。

  • 文字列を初期化する。
  • 空の辞書を初期化する。
  • 文字列をループ処理し、その文字がすでに辞書に存在するかどうかを確認する。
  • 存在しない場合は、その文字の出現回数を1として登録する。
  • すでに存在する場合は、カウントを1増やす。

サンプルコード

## 文字列の初期化
string = "tutorialspoint"
## 辞書の初期化
duplicates = {}
for char in string:
    ## その文字がすでに辞書に存在するかどうかを確認
    if char in duplicates:
        ## 存在する場合はカウントを増やす
        duplicates[char] += 1
    else:
        ## 存在しない場合はカウントを1で初期化
        duplicates[char] = 1
for key, value in duplicates.items():
    if value > 1:
        print(key, end=" ")
print()

上記のプログラムを実行すると、以下の出力が得られます。

出力

t o i

どちらの方法を選ぶべきか

count メソッドを使う方法は、文字ごとに文字列全体を走査するため計算量がO(n²)になります。一方、辞書を使う方法は文字列を一度だけ走査すればよいため、計算量はO(n)で済みます。短い文字列ならどちらでも問題ありませんが、長い文字列を扱う場合やパフォーマンスが重要な場面では、辞書を使った方法が効率的です。また、Pythonでは collections.Counter を使えば同様の処理をさらに簡潔に書けるので、実務ではそちらも検討してみるとよいでしょう。

  1. 【Python】文字列がすべてユニークな文字で構成されているか判定する方法

    本記事では、与えられた文字列に含まれる文字がすべて一意(ユニーク)であるかどうかを判定するPythonプログラムについて、その解法とアプローチをわかりやすく解説します。 問題の概要 文字列が入力として与えられたとき、その文字列に含まれるすべての文字が重複なく一意であるかどうかを判定します。たとえば「abcde」はすべて異なる文字で構成されているためTrue、「tutorialspoint」のように同じ文字が複数回出現する場合はFalseとなります。 アプローチ この問題は、以下のような手順で効率的に解くことができます。 ブール値の配列を用意する: 各インデックス i が「アルファベット(AS

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

    文字列がひとつ与えられます。ここでの課題は、その文字列の中から出現回数が2回以上の文字(重複文字)をすべて見つけ出すことです。 たとえば「Hello World. Lets learn Python」という文字列を例にすると、アルゴリズムは複数回出現している文字を検出します。この場合の出力は次のようになります。 e : 3 l : 4 o : 3 <空白> : 4 r : 2 t : 2 n : 2 この問題を実装するには、Pythonのcollectionsモジュールを使用します。collectionsからはCounter()クラスを利用できます。Counter()はハッシ