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学習するのは大変だなと思う方は、書籍やスクールを活用するのも手です。
最後までお読み頂きありがとうございました。