見出し画像

【python3】forとifを一行で書きたい

わたしへ。
ちょいちょい検索してますよね。覚えましょう。
わたしより。

forを一行で書くリスト内包表記

使えるところ→リストの値を一個ずつ取り出して加工してまたリストにしたいとき。条件が一つならifによる判定もできる。

datas = [1,2,3,4,5]
nibai =[]
for data in datas:
    nibai.append(data * 2)

こういう単純な処理に一々三行でfor文書くのめんどっちいなーって時に。

nibai = [ data * 2 for data in datas ]

って一行で書ける。
慣れないと突然出てくる変数dataに「お前はどこから出て来た!!」って言いたくなるけど、

新しいリスト = [ (forブロックの、append()の中身) (for文) ]

って書くイメージ。

if文つきで使う場合、

even = [ data for data in datas if data % 2 == 0 ]
新しいリスト = [ (forブロック内のappend()の中身)(for文)(if文) ]

という順に書く。

if文を一行で書く

超単純なif文、

# くじ引きしてくれる関数kuji_biki()を作ったとして……
result = kuji_biki()
if result == True:
    print("当たり~!!")

みたいなのを書きたい時に、一々二行使うの面倒だって時は、実は改行&インデントなしで

if result == True: print("当たり~!!")

って、一行で書ける。もっと早く知りたかった。

さらにelse文も必要な場合は、三項演算子を使って

print("当たり") if result == True else print("はずれ")

と書ける。三項演算子を使う時は

【Trueの時の処理】 if 【条件式】 else 【Falseの時の処理】

の順に書く。

さらにさらにif~elif~else文も三項演算子で書けるけど、個人的にはそこまで分岐するなら大人しくインデント使って書いた方が見やすいと思う。

三項演算子とリスト内包表記の合わせ技

datas = [1, 2, 3, 4, 5, 6]
san_baka = [ "ぱー" if data % 3 == 0 else str(data) for data in datas ]
print(san_baka)
# ["1", "2", "ぱー", "4", "5", "ぱー"]

三項演算子とリスト内包表記を合わせて使えば、「リストの中身を一個ずつ取り出して、条件に合うときはこう、合わないときはこうして新しいリストを作る」っていう内容を一行で書ける。

リスト内包表記+ifだけの時は

新しいリスト = [ (forブロック内のappend()の中身)(for文)(if文) ]

の順だけど、elseが登場して三項演算子を使う場合は

新しいリスト = [ (Trueの時のappend()の中身) if (条件) else (Falseの時のappend()の中身) (for文)  ]

の順番になって、for文とif文の位置がひっくり返るの、覚えにくいけど頑張れ。

参考

Pythonリスト内包表記の使い方 | note.nkmk.me

Pythonの三項演算子(条件演算子)でif文を一行で書く | note.nkmk.me

この記事が気に入ったらサポートをしてみませんか?