第29回【Python】二次元配列の入力 1、二次元配列の入力 2

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

はじめに

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

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

Python での配列の扱いってとても簡単に処理できるように見えるなぁ、と思います。PHP や JavaScript で書くことがあるのだけれど、うぉーめんどくせぇーって心の中で叫んでいることもある。

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

二次元配列の入力 1

以下の二次元配列を宣言し、全要素を各行ずつ半角スペース区切りで出力し、各行の終わりで改行してください。

1 3 5 7
8 1 3 8

書き方はいろいろあるのだと思うのだけれど、まずは、各行の最後の要素の判定をしなければならないのかな、と想像して、ストレートに書いてみる。

Python
L = [[1, 3, 5, 7], [8, 1, 3, 8]]
for i in range(len(L)):
    for j in range(len(L[i])):
        print(L[i][j], end="")
        if j < len(L[i]) - 1:
            print(end=" ")
        else:
            print()

こっちの方が Python らしくて好き。アスタリスクで配列を展開できるとか、とてもカッコいい。

Python
L = [[1, 3, 5, 7], [8, 1, 3, 8]]
for li in L:
    print(*li,sep=" ")
VBA
L = [{1, 3, 5, 7; 8, 1, 3, 8}]
For i = 1 To UBound(L, 1)
    For j = 1 To UBound(L, 2)
        Debug.Print L(i, j);
    Next
    Debug.Print
Next

二次元配列の入力 2

1 行目に整数 M が与えられます。
2 行目以降に 5 行 M 列の配列が与えられます。上から i 番目、左から j 番目の整数は a_ij です。
全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。


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

* M, a_ij は 1 以上 100 以下の整数


入力例

4
1 2 3 4
0 0 0 0
8 1 3 8
1 10 100 99
15 68 48 15

標準入力から受けたものを、そのまま出力する問題。paiza ではお馴染みのやつ。

Python
M = int(input())
A = [list(map(int,input().split())) for _ in range(5)]
for a in A:
    print(*a,sep=" ")

内包表記は素晴らしいと思うけれど、まだまだ使いこなせていないと思う。もっと精進しなければ。

VBA
M = Cells(1, 1)
Dim L() As Long
ReDim L(1 To 5, 1 To M)
For i = 1 To 5
    S = Split(Cells(i + 1, 1), " ")
    For j = 1 To M
        L(i, j) = Val(S(j - 1))
    Next
Next
For i = 1 To UBound(L, 1)
    For j = 1 To UBound(L, 2)
        Debug.Print L(i, j);
    Next
    Debug.Print
Next

多次元配列になるとちょっと複雑になってしまう。要素数を変数で宣言しようとすると、Dim では「定数式が必要です」とエラーが発生。回避策としては、ReDim ステートメントで要素数の宣言をすること。

最後に

簡潔に書ける Python のなんと素晴らしいことか。でも、何をしているかを理解するためには、少し面倒でも、他の言語と同じようなコードを書いてみることも必要なのではと思った。

各行の最後の要素の判定とか、どの言語でも似たような処理はしないといけなくなるわけだし。Python の書き方だけ頭に入れていると、応用力に繋がらないかも。いや、頭がいい人ならば都度コードを組み立てることができるのだろうけれど、経験しているかしていないかで速度に大きな差が出る気がしている。

というわけで、面倒だと言わず、ちゃんと手打ちでいろんなパターンのコードを打ってみようと思っているわけです。

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

Pythonpaiza,学習,Python

Posted by LeoSaki