【Python】リスト内包表記でifを使う

リスト内包表記とは?

リスト内包表記とは、リストや辞書に対してループ処理を実行し、
再びリストを返してくれる処理を指します。

書き方

まずは、リストを作成

sample = []
for i in range(10):
    sample.append(i)
 
print(sample)

sampleの中身を確認

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

リスト内包表記の記法

[x*2 for x in list]

listは変数に格納されたリストに当たります。
x*2はリストから取り出された値に対しての処理が行われる箇所です。
今回は、取り出された値(x)を2倍にする処理が実行されます。

先程作成したsampleというリストに対して処理を実行してみましょう。

[x*2 for x in sample]

結果

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

リスト内の値それぞれが2倍されましたね。

また、実行した結果を変数に格納する場合は、
以下のように記載します。

sample2 = [x*2 for x in sample]

リスト内包表記でif文を使う

リスト内包表記を実行する際に、if文で条件分岐をさせることが可能。

書き方

[x*2 for x in sample if x !=0]

if x != 0の部分で条件分岐をしており、
リストから取り出された値が0ではない場合に2倍される。

出力結果

[2, 4, 6, 8, 10, 12, 14, 16, 18]

elseも使う場合

[x*2 for x in sample if x !=0 else x*3]

実は上の書き方ではエラーになります。

if elseの書き方をしたい場合には、以下のように書きましょう。

[x*2 if x == 1 else x*3 for x in sample]

後ろに書くのではなく、forの前にif elseを記載することで、
リスト内包表記の書き方でelseも含めた条件分岐が可能です。