Pythonのcollections.Counter()を使ってアナグラムを判定する方法
アナグラムとは
2つの文字列が、使用している文字とその出現回数が完全に同じであれば(順序は問わない)、それらは互いに「アナグラム」であると言えます。このチュートリアルでは、Pythonのcollections.Counter()メソッドを使ってアナグラムを判定する方法を解説します。
入力: string_one = "cat" string_two = "tac" 出力: True
collections.Counter()とは
collections.Counter()は、文字列内の各文字の出現回数(頻度)を格納した辞書型のオブジェクトを返します。Counterオブジェクトには、most_common()(最も多く出現する要素の取得)やユニークな要素の抽出、カウントなど、便利なメソッドが多数用意されています。
Counterオブジェクトの基本例
# collectionsモジュールをインポート
import collections
# Counterオブジェクトを作成
counter = collections.Counter("Hafeez")
# Counterの中身を表示
print(counter)
# 文字列内で最も多く出現する文字を表示
print("\nMost common character")
print(counter.most_common(1))実行結果
上記のプログラムを実行すると、次のような結果が出力されます。
Counter({'e': 2, 'H': 1, 'a': 1, 'f': 1, 'z': 1})
Most common character
[('e', 2)]このように、Counterオブジェクトは各文字をキー、出現回数を値として保持しており、most_common(1)メソッドを使えば最も頻度の高い文字を簡単に取得できます。
アナグラム判定の手順
collections.Counter()を使ったアナグラム判定は、以下の手順で行います。
1. 比較対象となる2つの文字列を用意する。
2. それぞれの文字列に対してcollections.Counter()オブジェクトを作成する。
3. 両方のオブジェクトが等しい場合:
3.1. Trueを出力する。
4. 等しくない場合はFalseを出力する。サンプルコード
# collectionsモジュールをインポート
import collections
# 文字列を初期化
string_one = "cat"
string_two = "atc"
# 両方の文字列のCounterオブジェクトを比較
if collections.Counter(string_one) == collections.Counter(string_two):
# 等しいのでTrueを出力
print(True)
else:
# 等しくないのでFalseを出力
print(False)実行結果
上記のプログラムを実行すると、次のような結果が出力されます。
True
「cat」と「atc」は同じ文字(c・a・t)を1回ずつ含んでいるため、Counterオブジェクト同士が等しくなり、Trueが出力されます。この方法なら、文字の並び順に関係なく、文字の構成だけでアナグラムかどうかを正確に判定できます。
まとめ
collections.Counter()を利用すれば、文字ごとの出現回数を簡単に比較でき、アナグラム判定をわずか数行のコードで実装できます。ソートを使う方法よりも直感的で可読性が高いのが特徴です。このチュートリアルについて質問や不明な点がある場合は、ぜひコメント欄でお知らせください。
-
Pythonのunittestモジュールで学ぶユニットテストの基礎
本記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されている unittest モジュールを通じて、ソフトウェアテストの基本を解説します。unittest を使うことで、テストの自動化、セットアップ用コードと終了処理コードの共有、そして各フレームワークごとの独立したテスト実行が可能になります。ユニットテストでは、オブジェクト指向のさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について見ていきましょう。unittestの中核を担う4つの概念TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittest の基底クラ
-
【Python】OpenCVで動画からフレームを抽出して画像として保存する方法
OpenCVとは? OpenCV(Open Source Computer Vision Library)は、機械学習とコンピュータビジョン向けに開発されたオープンソースのプログラミングライブラリです。コンピュータビジョンアプリケーションの開発や、商用製品への機械学習機能の迅速な組み込みを支援する共通基盤を提供しています。 OpenCVには2,500を超える最適化済みアルゴリズムが収録されており、古典的な手法から最先端の手法まで幅広くカバーしています。これらを活用することで、顔検出・顔認識、物体の識別、動画内の人間の動作の分類、カメラの動きのトラッキング、複数枚の画像をつなぎ合わせた高解像度