第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 の内包表記って卑怯じゃね? って思う。これで、普通に書くよりも少しだけ処理が早くなるらしいので、使わないという選択肢はないなぁ。ただ、慣れるまで、読み解くのに時間がかかるかもしれない。

単純に配列を作るくらいのものであれば良いのだけれど、条件など組み込みながらの内包表記になると、一度展開したコードを作成して、それから内包表記を考えている。頭の中だけで組み立てられるようになりたい。そのために、いっぱいコードを書いて学習しようと思う。

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

Python学習,Python,paiza

Posted by LeoSaki