今度はアルファベット版。
アルファベットを配列に入れないといけないのだけどpythonでそんなのあったっけ?
と調べてみると、結構使う人がいるらしいですね、うまくまとまっているのがあったので
こちらで。(ありがとうございます!)
たしかにVBAのときもchrつかったなー。
あのときは呪文のようにしか聞こえなかったです(まだVBAはじめて2年目ぐらいのとき)
とはいえ。
97 +26文字ですね、覚えておこう。たしかによく使いそうです。
[chr(i) for i in range(97, 97+26)]
あとはこうですね。
前回の方法をつかってやります。
今回は私が使った方法がよかった。
N = int(input())
S = list(input())
A = [chr(i) for i in range(97, 97+26)]
counts =[]
for i in A:
count = 0
for j in S:
if i == j:
count += 1
counts.append(count)
print(*counts)
答えを見ると
N = int(input())
S = input()
count = {chr(x): 0 for x in range(ord("a"), ord("z")+1)}
for char in S:
count[char] += 1
print(" ".join(map(str, count.values())))
Sを配列にいれず文字列そのまま。(驚き)
count = {chr(x): 0 for x in range(ord("a"), ord("z")+1)}
なんか新しい書き方が出てきたな。
ord()
は文字をUnicode値に変換する関数。
97という値を覚えるよりはこっちのほうがいいか。。。
それにしてもrangeわかりやすいな。
{}は何の内包表記だっけ。。。そうそう、辞書だ。
VBAでもdictionaryでたしかあったはず。。。
辞書については理解があやふやなのでこの機会に覚える。
わかりやすいのがあった(ありがとうございます!)
https://aiacademy.jp/texts/show/?id=570
さて、ここから解読すると
まあやってることはカウントが0のa~zの辞書を作っている感じ。
で、ここでcount[char]で、文字で辞書にアクセスができるので、カウントできる感じ。
で、Sに入っているのは文字列なので、for文にいれると1文字ずつループできることがわかった。
S = input()
print(S)
for char in S:
print(char)
結果下のようになるので1文字ずつループしていることがわかる
aaabbbccdddde
a
a
a
b
b
b
c
c
d
d
d
d
e