重複しない要素(一意な要素)の個数(種類)をカウントを「Counter」を使わずに既存の方法で示します。
lst = ['aa', 'aa', 'aa', 'aa', 'bbb', 'c', 'c']
print(lst.count('aa')) # 4 の結果表示
print(lst.count('bbb')) # 1
print(lst.count('c')) # 2
print(lst.count('a'))# 0
上記のように集合から、各要素の数を数えたい場合、collections.Counterを使うと次のよな簡単な記述で可能となる。
(Counterは辞書型dictの継承クラスで、dictと同じ使い方ができ、キーに要素、値に出現回数という形のデータを持つ。)
import collections
counter = collections.Counter(['aa', 'aa', 'aa', 'aa', 'bbb', 'c', 'c'])
print(counter) # Counter({'aa': 4, 'c': 2, 'bbb': 1}) の結果表示
これは、次のように動的に行うこともでます。
import collections
counter = collections.Counter()
for m in ['aa', 'aa', 'aa', 'aa', 'bbb', 'c', 'c']:
counter.update( [ m ]) # update はリストで追加した情報群に更新するものなので [ ] で囲んでリストにして与えている。
print(counter) # Counter({'aa': 4, 'c': 2, 'bbb': 1}) の結果表示
さて、上記ように生成したcounterは、次のように操作できます。
ks=counter.keys() # キー情報群取得
vs=counter.values() # 値情報群取得
print(ks,vs) # dict_keys(['bbb', 'c', 'aa']) dict_values([1, 2, 4]) の結果表示
print("sum=",sum(vs)) # sum= 7 の結果表示
a=counter.most_common() # 数が多い順に並び替えたリストを取得(要素は、(キー,個数値)のタプル)
print(type(a), a) #<class 'list'> [('aa', 4), ('c', 2), ('bbb', 1)]の結果表示
print(counter.most_common(2) ) # [('aa', 4), ('c', 2)]の結果表示
最後行のcounter.most_common(2)で、数が多い順に並び替えたリストで先頭2個のタプルを抽出したリストを表示している。
またCounter 同士を足したり、Counter 同士を引いたり、論理和を求めたりできる。