【詳解Python】各アルファベットの出現回数を数える

# 入力
s = "aa b c ddd"

# 出力
a: 2
b: 1
c: 1
d: 3

アルファベットの小文字が与えられ、それぞれのアルファベットの出現回数を表示する

コード

import string

s = "aa b c ddd"

alphabets = {i: 0 for i in string.ascii_lowercase}

for i in s:
    if i in alphabets:
        alphabets[i] += 1

for k, v in alphabets.items():
    if v != 0:
        print(k, ': ', v, sep='')

解説

まず出現回数を示すために考えることは、

  1. それぞれのアルファベットのカウンターを用意する
  2. 文字列を1文字ずつ取り出す
  3. どの文字か判別して、その文字のカウントを1増やす
  4. カウントを出力する

という動作をする。

1-1 アルファベットを用意する

アルファベットの小文字の出現回数を数えるので、まずは全てのアルファベットを用意する。ここで使うのが、string.ascii_lowercase

string.ascii_lowercaseで小文字、string.ascii_uppercaseで大文字、string.digitsで数字を全て羅列したものを取り出せる。便利!

# 全てのアルファベットの羅列
lowercase1 = 'abcdefghijklmnopqrstuvwxyz'

# これもアルファベットを取り出せる
import string

string.ascii_lowercase
# 'abcdefghijklmnopqrstuvwxyz'


# これは数字を取り出す
string.digits
# 0123456789

1-2 アルファベットのカウンターを用意する

全てのアルファベットを数えるために配列を使う

alphabets = {i: 0 for i in string.ascii_lowercase}

print(alphabets)
# {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}

リスト内包表記でない方式で書くと

alphabets = {}
for i in string.ascii_lowercase:
    alphabets[i] = 0
    
print(alphabets)
# {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}

となる。これで'a'という文字が現れたら辞書alphabetsの’a’というキーの値を1増やせばカウントできる

2・3 文字列を取り出して、カウントを1増やす

for i in s: # 1文字ずつ取り出す
    if i in alphabets: # 取り出した文字がアルファベットなら
        alphabets[i] += 1 # その文字のカウントを1増やす

4 カウントを出力する

for k, v in alphabets.items(): # 辞書のキーと値を両方取り出す k:キー、v: 値
    if v != 0: # カウントが0でなければ
        print(k, ': ', v, sep='')