第28回【Python】各行の要素数の出力、i 行目 j 列目の出力

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

はじめに

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

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

初心忘れるべからず。いつも新鮮な気持ちで挑戦するようにしています。こちらの進みは遅いように見えますが、きちんとスキルチェックに挑戦したり、別の問題集を進めたりもしています。

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

各行の要素数の出力

以下の二次元配列を宣言し、この配列の各行の要素数を改行区切りで出力してください。

1
2 3
4 5 6

とうとう出てきました。各行の要素数が一定ではない場合の配列。いつもいつも各行の要素数が一定だなんて思うなよ。

Python
L = [[1], [2, 3], [4, 5, 6]]
for li in L:
    print(len(li))
VBA
Dim L(1 To 3, 1 To 3) As Variant
L(1, 1) = 1
L(2, 1) = 2
L(2, 2) = 3
L(3, 3) = 4
L(3, 1) = 5
L(3, 2) = 6
For i = 1 To 3
    cnt = 0
    For j = 1 To 3
        If L(i, j) Then cnt = cnt + 1
    Next
    Debug.Print cnt
Next

VBA の Ubound 関数は、配列の添え字・インデックスの最大値を取得する。強引に仕様通りのことはさせてみたけれど、あまり美しくない。他に書き方あるのだろうか。

i 行目 j 列目の出力

以下の二次元配列を宣言し、この配列の 2 行目 3 列目の要素を出力してください。

1 2 3
8 1 3
10 100 1

添え字がゼロからスタートすることさえ間違えなければ簡単なはず。

Python
L = [[1, 2, 3], [8, 1, 3], [10, 100, 1]]
print(L[1][2])
VBA
L = [{1, 2, 3; 8, 1, 3; 10, 100, 1}]
Debug.Print L(2, 3)

罠だ。こういう書き方をすると、添え字が 1 からスタートするらしい。分かりやすいかもしれないけれど、きちんと揃えておかないと、どこかでミスが発生する気がする。

最後に

VBA の限界を感じかけたが、強引になんとか回答に持っていくことができた。今回、一番時間がかかったのは、この VBA だったりする。

諦めたら試合終了・・・。

と、言い聞かせながら、もっと綺麗なコードが書きたいと心では泣きながら。

いや、ホント、なんかもっとうまい方法あるのかなぁ。LeoSaki(旦那)には思いつかなかった。

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

Python学習,Python,paiza

Posted by LeoSaki