第35回【Python】配列の書き換え、2 変数の入れ替え、配列の要素の入れ替え
現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 35 回目です。
毎朝 LunaSaki(嫁)が弁当を作ってくれます。有難いことです。もう何年も出勤日には必ず作ってくれています。LeoSaki(旦那)はそれを全部写真に残しています。なんか、そういう映画ありましたよねぇ。うちなんてもう何年分溜まってるだろ・・・。
それでは、今日も頑張ってみようと思います。
配列の書き換え
1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、その数が A だった場合、B に書き換えてください。
書き換えた N 個の整数を改行区切りで出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・A, B, N は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数
3 1 5
1 2 3 4 5
これは、前回活躍した enumerate 関数が脚光を浴びる場面じゃないだろうか。
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
for i,val in enumerate(L):
if val == A:
L[i] = B
print(*L,sep="\n")
VBA
ABN = Split(Cells(1, 1), " ")
A = ABN(0)
B = ABN(1)
N = Val(ABN(2))
L = Split(Cells(2, 1), " ")
For i = 0 To UBound(L)
If L(i) = A Then
L(i) = B
End If
Next
For Each li In L:
Debug.Print li
Next
2 変数の入れ替え
整数 A, B が与えられます。
A と B の値を入れ替えて、半角スペース区切りで出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・A, B は 1 以上 10 以下の整数
2 1
これは、Python らしい書き方でやってみる。そして VBA の方が、他の言語でも良く見るパターンだと思うので比較するとわかりやすい。あれやこれや。
Python
A,B = map(int,input().split())
A,B = B,A
print(A,B)
VBA
AB = Split(Cells(1, 1), " ")
A = AB(0)
B = AB(1)
tmp = A
A = B
B = tmp
Debug.Print A & " " & B
配列の要素の入れ替え
1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数の左から A 番目の数と B 番目の数の値を入れ替えて、改行区切りで出力してください。
なお、左端を 1 番目とします。
すべてのテストケースにおいて、以下の条件をみたします。
・N は 1 以上 10 以下の整数
・A, B は 1 以上 N 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数
2 3 5
1 2 3 4 5
これも、さっきやった問題と同じ方法で解いてみる。
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
L[A-1],L[B-1] = L[B-1],L[A-1]
print(*L,sep="\n")
VBA
ABN = Split(Cells(1, 1), " ")
A = Val(ABN(0))
B = Val(ABN(1))
N = Val(ABN(2))
L = Split(Cells(2, 1), " ")
tmp = L(A - 1)
L(A - 1) = L(B - 1)
L(B - 1) = tmp
For Each li In L:
Debug.Print li
Next
最後に
Python における 2 つの値の入れ替えがとても素敵。VBA で書いたような一時的な変数を用意して入れ替える方法が昔ながらで一般的だと思うけれど。まぁ、Python でも内部的にやっていることは同じらしいです。
Python らしさが出て、とても面白い学習でした。アスタリスク(*)での配列の展開とかもね。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません