【Python入門】2次元リストの作成を内包表記で簡潔に書く方法

Pythonで2次元リストを作成する場合、多重ループを使うので、どうしてもプログラム行数が増えてしまいますよね。

Pythonには内包(ないほう)表記という記述方法があって、これを使えば1行で2次元リストを作成出来ます。

こんな便利な方法はしっかりと覚えておくべきです。

今回は内包表記について解説します。

この記事はこんな人におすすめ!

  • Pythonを勉強し始めた初心者
  • プログラムを簡潔に書きたい人
  • 2次元リストの作成方法が分からない人

それでは始めましょう!

プログラミング言語の人気オンラインコース
目次

内包表記を使った2次元リスト作成サンプル

内包表記を使っった2次元リストの作成例として、行番号と列番号が同じ場合は「1」、異なる場合は「0」の4行3列の2次元リスト作成を挙げます。

outList = [[1 if i==j else 0 for j in range(1,4)] for i in range(1,5)]
print(outList)

[実行結果]

[[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]]

内包表記を使えば2次元リスト作成が1行で済みます。

それに対して内包表記を使わない場合の記述は以下となります。

outList = []
for i in range(1,5):
    buff = []
    for j in range(1,4):
        if i==j:
            buff += [1]
        else:
            buff += [0]
    outList += [buff]
print(outList)

内包表記を使わない場合は9行も記述が必要です。

このように内包表記を使えばプログラムが非常に簡潔になるので、内包表記を覚えておくメリットは大きいと思います。

内包表記による2次元リスト作成は一見難しそうに見えますが、1つ1つ分解していけば直ぐ理解出来るでしょう。

for文、if文それぞれの簡単な例で解説していきます。

for文の内包表記

for文の内包表記を解説するため、0から4までのリスト作成例を挙げます。内包表記を使った記述は以下となります。

outList = [i for i in range(5)]

[実行結果]

[0, 1, 2, 3, 4]

これを内包表記を使わない記述にすると以下になります。

outList = []
for i in range(5):
    outList += [i]
print(outList)

両者を比較すると、内包表記を使った記述はfor文の処理を「for」の手前に持ってきた形になっていますね。

for文の内包表記は、処理を「for」の手前に持ってくると覚えましょう。

if文の内包表記

次にif文の内包表記を解説するため、リスト順が3番目までは「0」、4番目以降は「1」を代入するリスト作成例を挙げます。内包表記を使った記述は以下となります。

outList = [1 if i>2 else 0 for i in range(5)]

[実行結果]

[0, 0, 0, 1, 1]

内包表記を使わない記述は

outList = []
for i in range(5):
    if i>2:
        outList += [1]
    else:
        outList += [0]
print(outList)

両者を比較すると、内包表記を使った記述はif文の処理を「if」の手前に持ってきて、else文の処理を「else」の後ろに持ってきた形になっています。

if文の内包表記は、ifの処理を「if」の手前に、elseの処理を「else」の後ろに持ってくると覚えましょう。

内包表記を使った2次元リスト作成の解説

for文、if文の内包表記が理解出来たと思いますので、2次元リスト作成の例を解説しましょう。

内包表記を使用しない例は以下でしたね。

outList = []
for i in range(1,5):
    buff = []
    for j in range(1,4):
        if i==j:
            buff += [1]
        else:
            buff += [0]
    outList += [buff]
print(outList)

多重ループがある複雑な表記でも、行のfor文、列のfor文、if文に分解し、1つずつ内包表記に変更していけばよいです。まずif文です。

outList = []
for i in range(1,5):
    buff = []
    for j in range(1,4):
        buff += [1 if i==j else 0]
    outList += [buff]
print(outList)

次に列のfor文を内包表記に変更してみます。

outList = []
for i in range(1,5):   
    outList += [[1 if i==j else 0 for j in range(1,4)]]
print(outList)

最後に行のfor文を内包表記に変更すると

outList = [[1 if i==j else 0 for j in range(1,4)] for i in range(1,5)]
print(outList)

このように多重ループも1つずつ分解して考えれば、内包表記にすることが出来ます。

まとめ

以上、2次元リストの作成を内包表記で簡潔に書く方法の解説でした。

内包表記を覚えておけば、多重ループがあり長くなりがちな2次元リスト作成も簡潔に記述することが出来ます。

こんな便利な方法はしっかりと覚えておきましょう!

今回の記事が皆さんのPython学習に役立つなら幸いです。

独りでPython学習するのは大変だなと思う方は、書籍やスクールを活用するのも手です。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学で機械工学を学んだ後、製造業で働く40代の会社員です。
IT系、電気系を学んでこなかった機械系人間が、ゲーム制作、電子工作に奮闘してます。
極力低コストでものづくりを楽しむのがモットー。

目次