python公式ドキュメントはこちら
リストを作成する時の方法の一つです。等価となる空のリストを作成したあとで for 文を使って要素を追加する方法よりも簡潔に記述することができます。
目次
リスト内包表記の書式
[式 for 変数 in イテラブルオブジェクト]
基本的な使い方
数値の0から9までの値を2乗したものを、リスト内包表記を使用して作成する場合で考えてみます。
まずはイテラブルに設定されたrange関数の開始値である0がfor文の変数xに設定されます。
そして、0が設定されたxが式x**2
で計算されリストに設定されます。これをrange関数の終了値9まで行い、リストsquaresに設定します。
# range関数の開始値0がxに設定 → 式 x**2 の処理を行う → これを終了値9まで繰り返す → リストsquaresに設定
squares = [x**2 for x in range(10)]
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
これを、等価となる空のリストを作成したあとで for 文を使って要素を追加する方法で行うと以下のようになります。
リスト内包表記の方がかなり簡潔に記述できることがわかります。
# 空のリストsquaresを用意
squares = []
# for文のイテラブルにrange(10)を設定し0~9までの10回ループを行う
for i in range(10):
# i**2をしてリストsquaresに追加
squares.append(i**2)
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
ネストしたリスト内包表記
リスト内包表記はネスト(入れ子)することも可能です。
sample_lst = [(x, y) for x in [1, 2] for y in ['a', 'b', 'c']]
print(sample_lst)
# [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]
この場合、後に書いた物が内側のループになります。ちょうど以下の二重のfor文と同じです。外側の変数xに1が設定された後、内側のyに’a’, ‘b’, ‘c’が順番に設定され、組み合わせを作成します。
sample_lst = []
for x in [1, 2]:
for y in ['a', 'b', 'c']:
sample_lst.append((x, y))
print(sample_lst)
# [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]
コメント