PythonでCounterと辞書の共通部分(積集合)を求める方法
Pythonでは、collectionsモジュールのCounterクラスと辞書を組み合わせることで、2つのオブジェクトの共通部分(積集合)を簡単に求めることができます。
以下に、その具体的な実装例を示します。
サンプルコード
from collections import Counter
def make_string(str_1,str_2):
dict_one = Counter(str_1)
dict_two = Counter(str_2)
result = dict_one & dict_two
return result == dict_one
string_1 = 'Hi Mark'
string_2 = 'how are yoU'
print("The first string is :")
print(string_1)
print("The second string is :")
print(string_2)
if (make_string(string_1,string_2)==True):
print("It is possible")
else:
print("It is not possible")
実行結果
The first string is : Hi Mark The second string is : how are yoU It is not possible
コードの解説
まず、必要なパッケージである
collections.Counterをインポートします。make_stringメソッドを定義し、引数として受け取った2つの文字列をそれぞれCounterオブジェクトに変換します。各文字の出現回数が記録されたCounterは、辞書と同じように扱うことができます。
&演算子を使用して2つのCounterの共通部分(積集合)を計算し、その結果を変数resultに代入します。関数の外側で2つの文字列を定義し、それらを引数として渡してメソッドを呼び出します。
関数が
Trueを返すかFalseを返すかに応じて、対応するメッセージがコンソールに出力されます。
補足:&演算子の動作について
Counter同士に & 演算子を適用すると、両方のCounterに存在する要素のうち、最小の出現回数を持つ新しいCounterが返されます。この仕組みを利用することで、「一方の文字列がもう一方の文字列に含まれる文字だけで構成できるかどうか」を効率的に判定できます。
上記の例では、大文字・小文字が区別されるため、'Hi Mark' の「H」「M」「k」などが 'how are yoU' 側に存在せず、結果として False(It is not possible)が出力されています。
-
Pythonで辞書の要素をランダムな順序で出力する方法
Pythonの辞書をランダムな順序で表示する方法 Pythonの辞書(dict型)は、リストのようにインデックスを持たないデータ構造です。そのため、辞書そのものを直接シャッフルすることはできません。 しかし、辞書のキーのコレクションは反復可能(イテラブル)であるため、randomモジュールのshuffle()関数を使ってランダムに並べ替えることができます。シャッフルしたキーをもとにループ処理を行えば、それぞれのキーに関連付けられた値もランダムな順序で出力できます。 手順の流れ list(D1.keys()) で辞書のすべてのキーをリストとして取得する random.shuffle() でキー
-
Pythonで例外メッセージをキャプチャして出力する方法
Pythonでは、発生した例外のメッセージをさまざまな方法でキャプチャし、出力することができます。以下に2つのコード例を示します。最初の例では、例外オブジェクトが持つ message 属性を使用しています。例1:message属性を使う方法try: a = 7/0 print float(a) except BaseException as e: print e.message出力integer division or modulo by zeroこのコードでは0による除算が行われたため ZeroDivisionError が発生し、そのメッセージ「integer di