【python】collections.Counterオブジェクトで文字数を保持する
こんばんは葛の葉です。
個人的な話ですが、Pythonを久しぶりに使うことになりそうなので勉強中です。
久しぶりに触ったらcollections.Counterオブジェクトというものが出てきたので触ってみることにしました。
collections.Counter
collections.Counterは辞書型のサブクラスで、Keyに要素を入れ、valueがそのカウントを保存して使うものらしいです。
公式ドキュメントはこちら↓。
かの有名な復活の呪文の数をCounterオブジェクトへ
ドラクエ2に出てくる「もょもと」の復活の呪文に出現する「ぺ」の数をカウントして保存してみます。
ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ
import collections password = "ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ" counter = collections.Counter() parsed_password = list(password) for i in parsed_password: counter[i] += 1 print(counter) # Counter({'ぺ': 27, 'う': 4, 'ゆ': 2, 'い': 2, 'や': 2, 'き': 2, 'り': 2, 'て': 1, 'み': 1, 'お': 1, 'む': 1, 'こ': 1, 'ほ': 1, 'じ': 1, 'と': 1, 'ま': 1, 'あ': 1, 'ら': 1})
ぺの数は27個らしい!
ついでにピクル化もしてみよう
Pythonではpickleモジュールを使ったシリアライズとデシリアライズもよくやってるようですのでこちらも使ってみます。
pickleの公式ドキュメントはこちら
import collections import pickle password = "ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ" counter = collections.Counter() parsed_password = list(password) for i in parsed_password: counter[i] += 1 print(counter)# Counter({'ぺ': 27, 'う': 4, 'ゆ': 2, 'い': 2, 'や': 2, 'き': 2, 'り': 2, 'て': 1, 'み': 1, 'お': 1, 'む': 1, 'こ': 1, 'ほ': 1, 'じ': 1, 'と': 1, 'ま': 1, 'あ': 1, 'ら': 1}) with open("count_password.pkl", "wb") as f: pickle.dump(counter, f)
こうすることでカレントディレクトリにcount_password.pkl
というバイナリファイルが作成されます。このバイナリファイルはpythonでロードすることが出来ます。公式ドキュメントにも記載はありましたが、セキュアには出来ないから安全と確信できないピクルは使わないようにとのこと。
import pickle with open("count_password.pkl", "rb") as f: counter = pickle.load(f) print(counter) # Counter({'ぺ': 27, 'う': 4, 'ゆ': 2, 'い': 2, 'や': 2, 'き': 2, 'り': 2, 'て': 1, 'み': 1, 'お': 1, 'む': 1, 'こ': 1, 'ほ': 1, 'じ': 1, 'と': 1, 'ま': 1, 'あ': 1, 'ら': 1})
先と同じものが標準出力に表示されました。