第31回【Python】i番目の出力 1、i番目の出力 2、【二次元配列の入出力】i番目の出力 Boss
現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 31 回目です。
ここで天気の話題を書くことができないのが歯痒い。書くことがないときは、天気の話題が一番なのに。というのも、必ずしも書いたその日にアップできるわけでなく、時間の都合で書きかけて翌日以降に続きをすることもあるので。ああ、そうか、アップする直前にここだけ書き直せばいいのか・・・。でも、忘れそうだな・・・。
それでは、今日も頑張ってみようと思います。
i番目の出力 1
整数 K と 整数 L が与えられます。
以下の二次元配列 a を宣言し、この配列の K 行目 L 列目の要素を出力してください。
上から i 番目、左から j 番目の整数は a_ij です。
1 2 3 4
10 100 0 5
8 1 3 8
15 34 94 25
すべてのテストケースにおいて、以下の条件をみたします。
* K, L は 1 以上 4 以下の整数
入力例
4 3
インデックスが 0 から始まることを理解していれば簡単。
Python
K,L = map(int,input().split())
li = [[1, 2, 3, 4], [10, 100, 0, 5], [8, 1, 3, 8], [15, 34, 94, 25]]
print(li[K-1][L-1])
VBA
KL = Split(Cells(1, 1), " ")
K = Val(KL(0))
L = Val(KL(1))
li = [{1, 2, 3, 4; 10, 100, 0, 5; 8, 1, 3, 8; 15, 34, 94, 25}]
Debug.Print li(K, L)
だけど、VBA のこの書き方だと、インデックスが 1 から始まる。混乱しそう。
i番目の出力 2
1 行目に整数 K と 整数 L が与えられます。
2 行目以降に 3 行 3 列の二次元配列が与えられます。
配列の K 行目 L 列目の要素を出力してください。
上から i 番目、左から j 番目の整数は a_ij です。
すべてのテストケースにおいて、以下の条件をみたします。
* K, L は 1 以上 3 以下の整数
* a_ij は 1 以上 100 以下の整数
入力例
2 3
1 2 3
4 5 6
7 8 9
今度は配列も標準入力から渡される模様。やることは同じだけれど、配列の作成はできるだけ内包表記で済ませるようにしたい。そういう練習をしておきたい。
Python
K,L = map(int,input().split())
li = [list(map(int,input().split())) for _ in range(3)]
print(li[K-1][L-1])
VBA
KL = Split(Cells(1, 1), " ")
K = Val(KL(0))
L = Val(KL(1))
Dim li() As Long
ReDim li(1 To 3, 1 To 3)
For i = 1 To 3
S = Split(Cells(i + 1, 1), " ")
For j = 1 To 3
li(i, j) = Val(S(j - 1))
Next
Next
Debug.Print li(K, L)
【二次元配列の入出力】i番目の出力 Boss
1 行目に整数 N, M, K, L が与えられます。
2 行目以降に N 行 M 列の二次元配列が与えられます。
配列の K 行目 L 列目の要素を出力してください。
上から i 番目、左から j 番目の整数は a_ij です。
すべてのテストケースにおいて、以下の条件をみたします。
* N, M は 1 以上 10 以下の整数
* K は 1 以上 N 以下の整数
* L は 1 以上 M 以下の整数
* a_ij は 1 以上 100 以下の整数
入力例
4 3 2 1
1 2 3
10 100 0
8 1 3
7 21 54
この単元の Boss は、すべてを標準入力から受けてみろ、ってことらしい。
Python
N,M,K,L = map(int,input().split())
li = [list(map(int,input().split())) for _ in range(N)]
print(li[K-1][L-1])
VBA
NMKL = Split(Cells(1, 1), " ")
N = Val(NMKL(0))
M = Val(NMKL(1))
K = Val(NMKL(2))
L = Val(NMKL(3))
Dim li() As Long
ReDim li(1 To N, 1 To M)
For i = 1 To N
S = Split(Cells(i + 1, 1), " ")
For j = 1 To M
li(i, j) = Val(S(j - 1))
Next
Next
Debug.Print li(K, L)
最後に
Python の内包表記って卑怯じゃね? って思う。これで、普通に書くよりも少しだけ処理が早くなるらしいので、使わないという選択肢はないなぁ。ただ、慣れるまで、読み解くのに時間がかかるかもしれない。
単純に配列を作るくらいのものであれば良いのだけれど、条件など組み込みながらの内包表記になると、一度展開したコードを作成して、それから内包表記を考えている。頭の中だけで組み立てられるようになりたい。そのために、いっぱいコードを書いて学習しようと思う。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません