問題の発生
いままで、「リストの内包表記って結局、forやらifが続いているコードをちぢめただけでしょ?学ぶのはあとでいいや」と敬遠してきた。しかし、プログラミングやpythonの学習で自作のプログラムを組んでいくと、コードがだらだらと長くなってしまい、あとから見返すと自分ですらわかりにくいことがあった。そこで、もっと簡潔にわかりやすく書きたいと感じるようになったので学習してみることにした。
基本的な形
for文でリストに格納する
my_list = [変数 for 変数 in 繰り返すもの]
例)
my_list = [i for i in range(5)]
print(list)
#結果
#[0, 1, 2, 3, 4]
forとif
条件に一致するものだけリストに格納される
my_list = [変数 for 変数 in 繰り返すもの if 条件]
例)
my_list = [i for i in range(5) if i % 2 == 0 ]
print(my_list)
#結果
#[0, 2, 4]
三項演算子
三項演算子の結果の値がリストに格納される
my_list = [Trueのときの動作 if 条件(変数に対して) else Falseのときの動作 for 変数 in 繰り返す処理]
my_list = ['偶数 ' if i % 2 == 0 else i for i in range(5)]
print(my_list)
#結果
#['偶数 ', 1, '偶数 ', 3, '偶数 ']
ifの違い
ifがforの後に来ると条件に一致するものがリストに追加される。
ifがforの前に来ると条件に基づいて要素の値が変更され追加される。
注意点
リスト内包表記はリストを新規作成することに適しているため、既存のリストに追加する場合には append や extend を使う。リスト内包表記で直接 append や extend を使うことはできない。
感想
リスト内包表記を使うことで、コードが短く、かつ読みやすくなると感じた。ただし、複雑な処理を詰め込みすぎると逆にわかりにくくなるので、使いすぎには注意が必要。