Iterable(反復可能オブジェクト)の正規表現と一致する部分を数えるサンプルコードです。collections
標準ライブラリのCounter
クラスを使用しています。
import re from collections import Counter values = ("ab1111", "ab1112", "ac2111", "ac2112", "ad2112", "ad2113") #正規表現パターンの準備 #このコードでは最初の一致部分を使用します。 pattern = re.compile(r"^a.+(\d\d)$") #カウンターオブジェクトの作成 #Counterの仕様からジェネレーターは使えないことに注意してください。 #使用すると結果がおかしくなります。 counter = Counter([m.groups()[0] for value in values if (m := pattern.match(value))]) #カウント結果の表示 print(counter) #> Counter({'12': 3, '11': 2, '13': 1}) #各種情報の表示 print(list(counter.elements())) #> ['11', '11', '12', '12', '12', '13'] print(counter.most_common(0)) #> [] print(counter.most_common(1)) #> [('12', 3)] print(counter.most_common(2)) #> [('12', 3), ('11', 2)]
Counter
は辞書や名前付き引数で初期値も指定できます。詳細は公式ドキュメントを確認してください。
参考