Pythonのfor文やif文を1行で書く方法
Pythonをブラウザで実行しながら実践的に学ぶ
Pythonの基礎からソフトウェアアーキテクチャ,アルゴリズムなどの応用的な内容まで幅広く学べます。
ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
Pythonを書いているときに、「もっとコードを短く、スッキリ書けないかな?」と思ったことはありませんか?
私自身、エンジニアとして10年以上Pythonを書いてきましたが、最初の頃はfor文やif文を1行で書くワンライナー構文にかなり苦戦しました。
この記事では、Pythonのfor文やif文を「1行で書く方法」を、初心者でも理解できるようにやさしく解説します。 「1行で書ける」と聞くと難しそうに感じるかもしれませんが、ポイントを押さえれば誰でも使えるようになります。
まずはおさらい:Pythonのfor文とif文の基本¶
「1行で書く方法」を理解するには、まず普通の書き方を押さえておくことが大事です。
ここで一度、基本の形を復習しておきましょう。
# 通常のfor文
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
このコードは、「fruits」というリストを順番に取り出して出力しています。
結果はこうなります
apple
banana
orange
とてもシンプルですね。 次にif文の基本も見てみましょう。
x = 10
if x > 5:
print("xは5より大きいです")
else:
print("xは5以下です")
これも基本的な構文ですが、慣れないうちはインデント(字下げ)やコロンの位置でつまずきやすいです。 しかしPythonには、こうした処理を1行にまとめるスマートな書き方が存在します。
for文を1行で書くには?「内包表記」がカギ¶
Pythonでfor文を1行に書く代表的な方法は、リスト内包表記(List Comprehension)です。
これはPython独特の文法で、リストを作るときによく使われます。 普通に書くと4〜5行かかる処理を、1行でスッキリ書けるのが魅力です。
例:リストの要素を2倍にする¶
以下は、リストの要素を2倍にするサンプルコードです。
numbers = [1, 2, 3, 4, 5]
doubled = [n * 2 for n in numbers]
print(doubled)
結果は以下の通り。
[2, 4, 6, 8, 10]
同じ処理を普通のfor文で書くと、こうなります。
numbers = [1, 2, 3, 4, 5]
doubled = []
for n in numbers:
doubled.append(n * 2)
print(doubled)
つまり、4行かかっていた処理が1行で書けるようになるんです。
これが「内包表記(Comprehension)」の強さです。
if文を1行で書く方法:「三項演算子」¶
if文にも1行で書く方法があります。 Pythonでは「条件式(三項演算子)」という形で書けます。
基本構文は以下の通りです。
A if 条件 else B
これは「条件がTrueならA、FalseならBを返す」という書き方です。
少し例を見てみましょう。
x = 10
result = "大きい" if x > 5 else "小さい"
print(result)
実行すると、以下のように表示されます。
大きい
もしxが3だったら、「小さい」と表示されます。 一見難しそうですが、「ifの前がTrueのとき」「elseの後がFalseのとき」と考えると覚えやすいです。
for文+if文を1行で組み合わせる¶
Pythonでは、for文とif文を同時に1行にまとめることもできます これは「内包表記+条件式」を組み合わせたテクニックです。
例:偶数だけを取り出す¶
以下は、偶数だけを取り出すサンプルコードです。
numbers = [1, 2, 3, 4, 5, 6]
evens = [n for n in numbers if n % 2 == 0]
print(evens)
出力結果は、以下のようになります。
[2, 4, 6]
「for n in numbers」でループしつつ、「if n % 2 == 0」で偶数のみ抽出しています。
これを普通に書くと、以下のようになります。
evens = []
for n in numbers:
if n % 2 == 0:
evens.append(n)
同じ処理が、ここまでスッキリ1行になるのは気持ちいいですよね。
一覧で整理!Pythonのfor文・if文ワンライナーまとめ¶
ここまで紹介してきた内容を、わかりやすく表にまとめました。
処理内容 | 通常の書き方 | 1行での書き方 |
---|---|---|
for文 | for item in list: … | [処理(item) for item in list] |
if文 | if 条件: … else: … | A if 条件 else B |
for+if | for item in list: if 条件: … | [処理(item) for item in list if 条件] |
for+if+else | for item in list: if 条件: … else: … | [A if 条件 else B for item in list] |
ワンライナーを使いこなすための練習ステップ¶
いきなり全部1行で書こうとすると混乱します。
そこで、私が新人エンジニアを教えるときによく勧めている「3ステップ練習法」を紹介します。
- まずは通常のfor文・if文で書く
- 中の処理を1行にまとめてみる
- それを内包表記や条件式に置き換える
たとえば「奇数だけを2倍にする」処理を考えてみましょう。
ステップ1¶
まずは通常のfor文・if文で書いてみましょう。
numbers = [1, 2, 3, 4, 5]
result = []
for n in numbers:
if n % 2 == 1:
result.append(n * 2)
print(result)
ステップ2¶
「append」の部分を意識して1行にできそうだなと考えます。
ステップ3¶
「append」の部分を内包表記や条件式に置き換えます。 最終形はこうなります。
result = [n * 2 for n in numbers if n % 2 == 1]
print(result)
こうやって、少しずつ慣れていくと自然と身につきます。
実務での注意点:1行に書きすぎない!¶
ここまで「1行で書く方法」を紹介してきましたが、1行で書ける=1行で書くべきではありません。 エンジニア歴10年の経験から言うと、可読性を犠牲にしてまで短くするのは逆効果です。
特に初心者がやりがちなミスがこちらです。
# NG例:読みづらい
result = [x * 2 if x % 2 == 0 else x + 1 for x in numbers if x > 0 and x < 100]
一見「かっこいい」ですが、後から見返すと何をしているか分かりにくい。 チーム開発では他の人も読むので、「短い」より「読みやすい」を優先するのが鉄則です。
まとめ¶
最後にこの記事のポイントをまとめます。
- for文やif文は「内包表記」や「三項演算子」で1行にできる
- ただし、読みやすさを最優先する
- 実務では「短いより、わかりやすい」が大事
- 慣れるためには、まず普通の書き方で理解すること
Pythonの良さは、読みやすさにあります。 その文化を大切にしながら、1行構文を便利なツールとして取り入れていくのがベストです。
ここまでお読みいただき、ありがとうございました!