[Python Tips] Pythonで九九表を作る

pythonで九九表を作りましょう。
プログラミング初学者お馴染みの課題の一つですね。また、Excelの複合参照の練習問題としてもたびたび目にします。

二重for文

九九表の課題と言えばやはり二重for文の演習問題です。for文を重ねて用いてみましょう。

#九九表リストの定義
kuku = []
for i in range(1, 10):

    #列リストの定義・初期化
    row = []

    for j in range(1, 10):
        row.append(i * j)

    #列リストの追加
    kuku.append(row)

for文で1~9までを二重に回して一行ずつ列のリストを作って、九九表のリストに追加していく。
上から順に一行ずつ詰まっていくイメージです。

内包表記を利用する

同じく二重for文を使った書き方でもPythonicに(=Pythonらしく)内包表記を用いたものも紹介しましょう。

kuku = [[i * j for i in range(1, 10)] for j in range(1, 10)]

たったの一行とコード量自体は短くなりましたが、二重の内包表記は可読性が高くないので人を選びそうです。
処理内容自体は一つ目のものとほとんど変わりません。

ブロードキャストを利用する

そもそも九九表を作るというのは二つの一次元配列の演算を交差するように行い、二次元配列に格納するということです。
ブロードキャストをうまく使えば配列の掛け算一回で作れてしまいます。

import numpy as np

row = np.arange(1, 10).reshape(1, -1) #[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
column = np.arange(1, 10).reshape(-1, 1) #[[1], [2], [3], [4], [5], [6], [7], [8], [9]]
kuku = row * column

rowのshapeが(1, 9)、columnのshapeが(9, 1)なのでkukuのshapeはきちんと(9, 9)となり、無事に九九表が完成します。


九九表を作るという一つの問題からpythonのfor文、内包表記、ブロードキャストを利用した並列演算まで知見を広げてみました。
特に、1次元配列同士の交差するような演算をブロードキャストを用いて行うプログラムは一度理解しておいて損なしです。
うまく拡張して多次元の演算に対しても活用していきましょう。

ライター:H.I