第84回【Python】数値の出現率

現在取り組んでいるのは、paiza ラーニング問題集「データセット選択メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 84 回目です。

LunaSaki(嫁)と出かけた先で、記念に、マグネットを買うことが多いです。近場の道の駅から遠くのテーマパークまで、いろいろと並んでいます。こういう後に残る思い出グッズは始めてしまうと止められなくなってしまうものです。

それでは、今日も頑張ってみようと思います。

数値の出現率

0 以上 9 以下の整数が N 個与えられます。各数値の出現回数を求め、「0」の出現回数、「1」の出現回数、…「9」の出現回数、をこの順に半角スペース区切りで1行に出力してください。

N
A_1 A_2 ... A_N

すべてのテストケースにおいて、以下の条件をみたします。

・ 入力はすべて整数
・ 1 ≦ N ≦ 100
・ 0 ≦ A_i ≦ 9 (1 ≦ i ≦ N)


入力例

5
1 2 3 3 6

出力例

0 1 1 2 0 0 1 0 0 0

最初に思い浮かんだ方法が辞書。模範解答はリストだったので、両方で書いてみよう。

Python(リスト)
N = int(input())
A = [int(x) for x in input().split()]
li = [0]*10
for a in A:
    li[a] += 1
print(*li,sep=' ')
Python(辞書)
N = int(input())
A = [int(x) for x in input().split()]
dic = { i : 0 for i in range(10)}
for a in A:
    dic[a] += 1
print(' '.join(map(str,dic.values())))
VBA(リスト)
N = Cells(1, 1)
a = Split(Cells(2, 1), " ")
Dim li(10) As Integer
For Each v In a
    li(v) = li(v) + 1
Next
For i = LBound(li) To UBound(li)
    If i = UBound(li) Then
        Debug.Print li(i)
    Else
        Debug.Print li(i);
    End If
Next
VBA(辞書)
N = Cells(1, 1)
a = Split(Cells(2, 1), " ")
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
For i = 0 To 9
    dic.Add i, 0
Next
For Each v In a
    dic.Item(Val(v)) = dic.Item(Val(v)) + 1
Next
For Each v In dic
    Debug.Print dic(v);
Next

最後に

辞書型は速い。と、教わったので、使える場面では辞書型も選択肢としている。実際、Lambda で何回やってもタイムアウトしていたコードが、配列を辞書型に修正したところ、余裕で動いた、ということもある。LeoSaki(旦那)の知識不足です。面目ない。

VBA の連想配列もたまにしか使わなかったのだけれど、改めて書いてみると、Python とあまり変わらずに使えて便利な気がした。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki