第38回【Python】要素のカウント、配列末尾への追加

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

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

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

ちょっと後ろ向きなことを言って申し訳ないのですが、一概に IT 業界といってもいろいろあるってもんです。テレビとかの影響か、とても期待をもって入社される方の中には、自分がやりたいのはこういうことじゃないと言われることがあります。明日から行きません、と言われたときのショックは大きかった。

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

要素のカウント

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数に含まれている M の個数を出力してください。


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

・N, M は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


5 1
1 1 1 2 2

便利な関数を使う方法と、一つずつ数える方法。両方を試してみる。

Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
cnt = 0
for li in L:
    if li == M:
        cnt += 1
print(cnt)
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
print(L.count(M))
VBA
NM = Split(Cells(1, 1), " ")
N = Val(NM(0))
M = NM(1)
L = Split(Cells(2, 1), " ")
For i = 0 To UBound(L)
    If L(i) = M Then cnt = cnt + 1
Next
Debug.Print cnt

うーん。countif を使ってみようとしたのだけれど、うまくいかない。なんでだろう。

配列末尾への追加

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数の末尾に整数 M を挿入し、改行区切りで出力してください。


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

・N, M は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


5 1
1 2 3 4 5

なんか、VBA で書くのが面倒くさそうな予感しかしないぞ。Python では簡単に書ける気がする。

Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
L.append(M)
print(*L,sep="\n")
VBA
NM = Split(Cells(1, 1), " ")
N = Val(NM(0))
M = Val(NM(1))
Dim li() As Long
ReDim li(N - 1)
L = Split(Cells(2, 1), " ")
For i = 0 To UBound(L)
    li(i) = Val(L(i))
Next
ReDim Preserve li(N)
li(N) = M
For Each num In li:
    Debug.Print num
Next

もっとスマートな書き方はないのだろうか・・・。精進します。

最後に

VBA の動的配列ってなんか難しくないですか? 頭の中をしっかり整理しながら進めないとこんがらがってしまう。まぁ、VBA の場合、最悪ワークシートに逃げてごちゃごちゃと整理しちゃう方法もあるにはありますが。

Python はスマートでわかりやすいです。ただ、Python だけやってる若手は、アルゴリズムの理解が弱めになりがち。他の言語で同じコードに挑戦してみるというのは、良い試みだと自画自賛。

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

PythonPython,paiza,学習

Posted by LeoSaki