Pythonでコード量をぐっと減らす内包表記、三項演算子を紹介します。
内包表記
for文を1行に書くことができる表現です。
for文に使用できるイテラブルなオブジェクトで使用可能です。
[式 for 変数名 in イテラブルなオブジェクト]
で記述可能です。
list_1 = [1, 2, 3, 4, 5]
double_list_1 = []
for item in list_1:
# list_1の各要素の2倍を格納
double_list_1.append(item*2)
print(double_list_1)
# [2, 4, 6, 8, 10]
# 上記を内包表記で書くと1行に収まる
double_list_2 = [ item*2 for item in list_1 ]
print(double_list_2) # [2, 4, 6, 8, 10]
内包表記と条件式
内包表記にはif文
を含めることもできます。
[式 for 変数名 in イテラブルなオブジェクト if 条件文]
で記述可能です。
list_1 = [1, 2, 3, 4, 5]
double_list_1 = []
for item in list_1:
# list_1の要素の内、偶数のみ2倍
if item % 2 == 0:
double_list_1.append(item*2)
print(double_list_1)
# [4, 8]
# 上記を内包表記で書くと1行に収まる
double_list_2 = [ item*2 for item in list_1 if item % 2 == 0]
print(double_list_2) # [4, 8]
ネストした内包表記
for文の中にfor文を記載するネストも内包表記で一行で記載可能です。
[式 for 変数名1 in イテラブルなオブジェクト1 for 変数名2 in イテラブルなオブジェクト2...]
で記述可能です。
list_1 = [[1,2],[3,4],[5,6]]
double_list_1 = []
for item_1 in list_1:
for item_2 in item_1:
double_list_1.append(item_2*2)
print(double_list_1)
# [2, 4, 6, 8, 10, 12]
# for文のネストも内包表記で1行
double_list_2 = [item_2*2 for item_1 in list_1 for item_2 in item_1]
print(double_list_2)
# [2, 4, 6, 8, 10, 12]
三項演算子
続いて、if文
を1行で記載する表現です。
三項演算子で1行で表現することができます。
条件が成立した時の値 if 条件 else 条件が成立しなかった時の値
で記述可能です。
target = 2
result_1 = 0
if target % 2 == 0:
result_1 = target*2
else:
result_1 = target*3
print(result_1) # 4
# 三項演算子で1行
result_2 = target*2 if target % 2 == 0 else target*3
print(result_2) # 4
ネストした三項演算子
ネストしたif文
も三項演算子で表現可能です。
条件1が成立した時の値 if 条件1 else 条件1が成立しなかった時の値 if 条件2 else 条件2が成立しなかった時の値
で記述可能です。
target = 7
result_1 = 0
if target % 2 == 0:
result_1 = target*2
elif target % 3 == 0:
result_1 = target*3
else:
result_1 = target*10
print(result_1) # 70
# 三項演算子で1行
result_2 = target*2 if target % 2 == 0 else target*3 if target % 3 == 0 else target*10
print(result_2) # 70
まとめ
for文、if文をすっきりさせる内包表記、三項演算子について紹介させていただきました。
紹介させていただきましたが、乱用には注意です。
特にネストした三項演算子の乱用は可読性が落ちます
見やすいコードを目指して書いていたはずが、気付けば見にくいコードになってしまうような本末転倒な結果にならないようにご注意ください。
0 件のコメント :
コメントを投稿