第36回【Python】部分配列、配列の連結

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

はじめに

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

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

前回お弁当の話を書いたら、とある方に仲良しの秘訣は? と聞かれました。15 年一緒にいて(知り合ってからであれば、19 年くらい)、小さな言い合いはあれど、本気の喧嘩はしたことがありません。多分、お互いがお互いを知り尽くしているから、喧嘩になるようなことをわざわざしないんだと思います。なので、秘訣は、思いやり? でしょうか。

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

部分配列

1 行目に整数 A, B, N (A ≦ B)が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、左から A 番目から B 番目までの数を抜き出し、改行区切りで出力してください。
なお、左端を 1 番目とします。


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

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


2 4 5
1 2 3 4 5

Python のスライス記法はとても便利。しかし、L[ start : end ] の end が含まれるか含まれないか、身に沁みつくくらいまでやっておかないと、実際にコードを書くときに手が止まってしまう。

Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
for li in L[A-1:B]:
    print(li)
VBA
ABN = Split(Cells(1, 1), " ")
A = Val(ABN(0))
B = Val(ABN(1))
N = Val(ABN(2))
L = Split(Cells(2, 1), " ")
For i = A - 1 To B - 1
    Debug.Print L(i)
Next

VBA で書いたようなやり方が昔ながらのやり方で、もちろん、Python でも同じように書くことはできる。単純に、Python を使うのならば、Python らしいやり方でやりたいだけなのだ。

配列の連結

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
3 行目に M 個の整数 b_1, b_2, …, b_M が与えられます。
N 個の整数 a_1, a_2, …, a_N の後ろに M 個の整数 b_1, b_2, …, b_M を連結させ、改行区切りで出力してください。


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

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


2 3
1 2
3 4 5

Python では簡単に書くことができる。VBA でこれをやろうと思うと、結構考えてしまう。

Python
N,M = map(int,input().split())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
ans = A + B
print(*ans,sep="\n")
VBA
NM = Split(Cells(1, 1), " ")
N = Val(NM(0))
M = Val(NM(1))
A = Split(Cells(2, 1), " ")
B = Split(Cells(3, 1), " ")
ans = Split(Join(A, " ") & " " & Join(B, " "), " ")
For Each S In ans
    Debug.Print S
Next

一度展開して結合して配列に戻す、という面倒な手順で、なんとか配列を結合することができた。

最後に

配列を自由に扱えることができるようになれば、コードの幅が広がると思う。Python には、便利な使い方がたくさんあって、それらを知り自由に扱うことができるようになれば、スピードも段違いに早くなる。

いろんなパターンを学習して引き出しをいっぱい作ることができるようになりたい。

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

Python学習,Python,paiza

Posted by LeoSaki