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

Pythonのcollections.Counterでアナグラム(並べ替え単語)を判定する方法

同じ文字を含みながら、文字の並び順が異なる2つの文字列は「アナグラム」と呼ばれます。たとえば「spot」と「post」は、まったく同じ字母で構成されているため、互いにアナグラムの関係にあります。

この記事では、Pythonの標準ライブラリであるcollectionsモジュールに含まれるCounter()関数を使って、2つの文字列がアナグラムかどうかを判定する方法を解説します。

collections.Counterとは?

collectionsモジュールは、リスト・辞書・セット・タプルといったデータのコレクションを効率的に扱うためのツールを提供します。その中のCounter()は、コレクション内に各要素が何回出現するかを数え上げ、「要素とその出現回数」を対応付けた辞書形式のオブジェクトを返す便利な関数です。

この性質を利用すると、判定ロジックは非常にシンプルになります。2つの文字列に含まれる各文字の出現回数が完全に一致していれば、その2つはアナグラムであると判断できるのです。

実装例

以下は、Python 3で動作するサンプルコードです。「top spot」と「pot post」という2つの文字列を比較しています。

from collections import Counter

StringA = 'top spot'
StringB = 'pot post'

# 各文字列の文字カウントを辞書として表示
print(Counter(StringA))
print(Counter(StringB))

# 辞書同士を比較してアナグラムかどうか判定
if Counter(StringA) == Counter(StringB):
    print('StringA と StringB はアナグラムです')

実行結果

上記のコードを実行すると、次のような結果が出力されます。

Counter({'t': 2, 'o': 2, 'p': 2, 's': 1, ' ': 1})
Counter({'t': 2, 'o': 2, 'p': 2, 's': 1, ' ': 1})
StringA と StringB はアナグラムです

ポイント解説

  • Counterオブジェクト同士は==演算子で直接比較でき、内部のカウント内容が一致すればTrueを返します。
  • この例では空白文字も1文字としてカウントされる点に注意してください。空白を無視したい場合は、string.replace(" ", "")などで事前に除去しておきましょう。
  • 大文字と小文字を区別したくない場合は、string.lower()で統一してから比較するとよいでしょう。

このように、collections.Counterを使えば、ソートやループ処理を書かずとも、わずか数行のコードでアナグラム判定を実装できます。可読性が高くパフォーマンスにも優れた、Pythonらしいアプローチと言えるでしょう。

  1. PythonとSeleniumでWhatsAppチャットボットを作る方法

    はじめに この記事では、Pythonを使ってWhatsAppのチャットボットを作成する方法を解説します。TwitterやFacebook向けの一般的なチャットボットとは異なり、WhatsAppは運営ポリシーの関係上、プラットフォーム上で直接ボットを動かすことができません。 しかし、SeleniumというPythonの強力なパッケージを使えば、ブラウザの操作を自動化することでこれを実現できます。Seleniumを利用すれば、ブラウザ経由で「WhatsApp Web」を自由に操作できるのです。 必要なもの 準備が必要なのは、主に以下の3点です。 1. Selenium Seleniumはpip

  2. PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法

    はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c