第39回【Python】要素の削除、要素の挿入

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

はじめに

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

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

多忙を極めている今日この頃。学習だけは続けようと頑張っています。年度替わりの初月はどうしようもないです。例年のことだけれど慣れないものです。

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

要素の削除

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
左から M 番目の要素を削除し、削除した後の N – 1 個の要素を改行区切りで出力してください。
なお、左端を 1 番目とします。

N M
a_1 a_2 ... a_N

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

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


5 3
1 2 3 4 5

左端を一番目としているところに注意。あとはそんなに難しい問題ではない。

Python
N,M = map(int,input().split())
A = list(map(int,input().split()))
del A[M-1]
for a in A:
    print(a)
VBA
Dim L() As Variant
NM = Split(Cells(1, 1), " ")
N = Val(NM(0))
M = Val(NM(1))
A = Split(Cells(2, 1), " ")
ReDim L(N)
For i = 0 To UBound(L) - 1
    L(i) = A(i)
Next
For i = M - 1 To UBound(L) - 1
    L(i) = L(i + 1)
Next
ReDim Preserve L(UBound(L) - 1)
For Each li In L
    Debug.Print li
Next

VBA だと途端に難易度が上がった。変数 A を配列と宣言しても、Split 関数で受け取れない。そのままだと Redim ができない。苦肉の策でこう書いてみたけれど、正解はどうなんだろう・・・。

要素の挿入

1 行目に整数 N, M, K が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
左から M 番目に K を挿入し、挿入した後の N + 1 個の整数を改行区切りで出力してください。
なお、左端を 1 番目とします。


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

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


5 3 10
1 2 3 4 5

こちらも先ほどと同様、左端を一番目としているところに注意。あとはそんなに難しい問題ではない。

Python
N,M,K = map(int,input().split())
A = list(map(int,input().split()))
A.insert(M-1,K)
for a in A:
    print(a)
VBA
Dim L() As Variant
NMK = Split(Cells(1, 1), " ")
N = Val(NMK(0))
M = Val(NMK(1))
K = NMK(2)
A = Split(Cells(2, 1), " ")
ReDim L(N)
For i = 0 To UBound(L) - 1
    L(i) = A(i)
Next
ReDim Preserve L(UBound(L) + 1)
For i = UBound(L) To M Step -1
    L(i) = L(i - 1)
Next
L(M - 1) = K
For Each li In L
    Debug.Print li
Next

インデックスを頭の中で整理しながらコードを書くのは大変。LeoSaki(旦那)は紙にメモをとりながらやってます。結局のところ、昔ながらの手書きが一番確実な方法です。LeoSaki(旦那)の場合は。

最後に

Python で書くと秒で終わるのに、VBA で書くと時間かかった。Python 素敵。でも、業務効率化を考えるときに真っ先に思い浮かぶのは VBA なんだなぁ。office 365 だと VBA を使うのがちょっと面倒だったり、いろいろと問題が起きているけれど。

型の問題は奥深い。でも、他の言語でコードを書く時にとても役立っている。

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

Pythonpaiza,学習,Python

Posted by LeoSaki