Pythonのfor文を一行で書く方法と複数行との違い

Pythonのループ処理に使われるfor文は基本的に複数行でコロン(:)とインデントを使って書かれますが、ときには1行で書くこともできちゃいます。

今回はその一行で書く方法と、複数行で書いた時との違いを紹介していきましょう。この記事のコードを実行するときはIDLEで試してください。

もし、for文の基本的な内容をまだ知らないのであればコチラからご確認下さい。

関連記事

Pythonのループ処理に使われる構文にはfor文とwhile文があります。今回はそのfor文の使い方解説をしていきます。 for文とは for文はループ処理を行う構文です。Pythonで書く場合はコロン(:)とインデントに注[…]

Pythonのfor文解説

for文を一行で書く方法

リストの中にfor文を1つ

構文は以下のようになります。

一番最初に書かれているxはそのあとの変数に依存させることもできますし、独立させることもできます。

以下の例でその違いを確かめましょう。

一つ目は、変数xが0~4の値をとるのに対して、「2 * x」となっているので2倍の数のリストを作っています。これがリストの中身を変数に依存させるタイプ。

二つ目は、変数iが0~3の値をとるのにたいして、’Hello’を4回繰り返しています。これはリストの中身と変数が関係していない(変数iの値によってリストの中身が変化しない)ので独立しているタイプといえます。

上の二つの例を一行ではなく複数行で書くと以下のようになります。

まずは空のリストを用意して、それにappend()メソッドで要素を追加しています。一行で書くよりも複雑になっていることが分かります。

リストの中にfor文を2つ

x, yの値をそれぞれ別々のfor文を使って出力しています。「for x in range(3)」なのでxの値は0~2、「for y in range(2)」なのでyの値は0,1となります。

これを複数行で書いてみると以下のようになります。

for文が入れ子になっていてややこしいですね。コードも長くなって見にくいので一行で書くことをお勧めします。

リストにfor文とif文を使う

リストの中に書くときはfor文とif文を合わせて使うことができます。先にfor文を書いてから、あとにif文を書きます

上でやった例に「if x != y」を追加しています。つまり、xとyが一致しないならリストにデータを追加するということです。

出力結果を見ても分かる通り、xとyの値が異なるものだけがリストに格納されています。

このコードもfor文とif文の入れ子で書くことができます。

一行と複数行の違い

一行で書く場合とインデントを使って複数行で書く場合ではforループが終わったときの変数の状態に違いがあります

このように複数行で書いた場合、ループが終了したときの変数iの値は保存されます。ですから、ループ後に変数iを出力すると、ループ終了時の値である2が表示されているわけです。

ですが、一行で書いた場合は以下のように変数iの値は保存されません

プログラムによってどの書き方が最適化は変わってきますが、どの変数に何の値が保存されているのかには注意してください。

まとめ

今回はfor文を一行で書く方法を見ていきました、初めてこの方法を知ったときは感動しました。またif文とのコンボもあるので使える幅は広がりそうですね。

この記事ではリストを作るときに角括弧([])を使いましたが、list関数でも同じ処理ができます。最後にこのコードを紹介して終わりにしたいと思います。

参考になれば幸いです。

関連記事

Pythonでリストをつくるときにわざわざデータを一つ一つ入力していくのはメンドウですね。そこで今回はより簡単にリストを作る方法を紹介します。 リストの中に直接for文やif文を書くことで条件付きの値をリストに格納することができます[…]

Pythonのリストで内包表記する方法「for・if・lambdaの書き方」
Pythonのfor・while・if文に関する記事たち
5

当ブログではPython初心者が独学で習得するためのカリキュラムを公開中!

初心者がPythonを独学で習得できたロードマップはコチラ

Pythonのfor文を一行で書く方法と複数行との違い
最新情報をチェックしよう!