支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


for文はプログラミングの基本である

Pythonでのfor文を調べた時に、違和感を感じることがありました。for文は数字を順々に回してループを作るイメージがあったのですが、Pythonのfor文は数字以外でもループさせることができるようでした。インターネットで調べれば、for文をあまり理解していなくてもロジックに組み込むことはできます。ですが、調べたものをただ組み込むだけでは応用させることができません。また、構造の理解が乏しいと問題が発生した時に適切なアプローチで対処することができません。 そのためこの度基本に立ち返ってPythonのfor文について調べることにしました。for文の基本的な使い方をはじめ、知識の漏れの確認、構造への理解を目標にしています。 for文はプログラミング言語全般において、最も基本的な文法の一つです。今回はPythonのfor文について着目していますが、プログラム作成において基軸になる文法を調べることで、他プログラミング言語のfor文を理解しやすくなる効果も同時に期待できます。

for文について知ってみる

Pythonのfor文の基本

Pythonにおいてfor文を作成する場合、forの宣言の後に、適所にin、文末にコロン(:)を設置して形作ります。javaの場合は、波括弧({})でfor文の中身を括ることでブロックを形成しますが、Pythonの場合for文の宣言箇所にコロンを設置し、for文のインデントを下げることでブロックを認識させます。波括弧などの物理的な囲いを使用しないため、誤って囲いの外に記述してしまい、for文の中の処理として認識されていないミスを防ぐことができます。反面、インデントの管理を厳密に行う必要があります。通常、プログラムのインデントは視覚的にブロックの範囲を認識しやすくするためのルールでしかありません。しかし、Pythonではインデントにブロックの認識効果を付与しているため、インデントを適切に行わなかった場合、プログラムが破綻します。 これらを調べたことによりPythonでfor文を使用する際は、for文の宣言を適切に行った後、ブロックをインデントで明示する必要があることがわかりました。

javaに似たfor文を書くにはrange関数が必要だった

意外にもjavaのfor文に近いイメージで記述する場合、Pythonの素のfor文では書けませんでした。range関数でjavaのfor文とほぼ同じ条件をセットすると既定の回数ループさせることができます。絶対条件は上限値のみで、初期値、増加値は任意条件となります。注意点は、上限の値は未満という認識が必要(10を設定したら0~9が対象になる)であることです。 使い方の考察としては、とあるデータ群から特定のデータを連続して抜き出す場合に有効です。使用者側がデータ抜き出しの初期値と上限値を入力し、プログラム側で値を受け取る形を作れば再利用可能な形で実現できます。この使い方をする場合は、増加値は1ずつ増えるデフォルトのまま使用しないと制御が難しくなることが予想されます。

Pythonの素のfor文は自由度が高い

Pythonのfor文が基本的に扱うものはイテラブルオブジェクトになります。イテラブルオブジェクト内の要素を順々に取り出し、処理を行います。イテラブルオブジェクトとは要素を順々に取り出すことができるオブジェクトのことで、配列・辞書型、加えて文字列も該当します。文字列が該当するため、一文字ずつ切り出して処理をする場合for文だけで可能です。文字列分割の方法や切り出し文字格納先変数などをいちいち考える必要がありません。for文で用意されたものを利用し、独自の加工を加えるだけで文字に対しての処理を完了させることができます。 Pythonのfor文はオブジェクトの中身を消化するまで行ってくれるので、javaのfor文使用時に頭を抱えがちになる、要素の最大数を事前に調べることをしなくて済みます。要素に対しての処理にのみ注力することができます。

オプションでfor文をコントロールする

Pythonのfor文でもbreakやcontinueが使用可能です。これらのオプションを併用することで処理の過程にfor文を組み込みやすくなります。 breakの使用用途例として、条件に合致するデータを捜索していた場合が挙げられます。該当のデータが見つかったら捜索を切り上げる処理とbreakは相性がとても良いです。無駄なループをカットできるため、処理時間の短縮に貢献します。 continueの使用用途例としては、breakとは逆に条件に合致しない場合にcontinueで次のループに移動する使い方が考えられます。条件に合致するデータを探している場合、該当しなければ基本的に何もさせたくないケースが考えられます。余計な処理をさせないcontinueを組み込むことでfor文の柔軟性の向上が期待できます。

なんとelseも使える

Pythonでは、なんとelseもfor文で使えました。if文とは多少意味合いが異なり、forループの最後に行いたい処理を記述することができます。終端処理が必要な場合、elseブロックに記述することでスムーズな流れで処理することが可能です。 CSV形式作成を例にした場合、単語の後ろにカンマ(,)が必要ですが、行末だけは付けません。for文の終端時に文末のカンマを消す処理(スライス表記等で可能)を入れれば、きれいな値を作成することができます。

inはおまじないではない

for文を使用する時はinの文字を加えて記述します。当然のように記述するためおまじないのように見えますが、実はきちんと意味を持ちます。inには集合体の中に要素があるかを判定する意味合いがあります。in単体で使用すると対象要素が集合体にあるかどうかを、True・Falseで返します。for文利用の場合は要素を代入する流れとなり、単体利用時と逆の流れで利用されます。for文を利用することにより、知らず知らずのうちにinの効果を使っていたことになります。

まとめ

for文は数字を決まった上限回数まで繰り返すもの、という固定概念がもともとありました。そのためPythonでfor文を使用してもきちんと理解することができませんでした。今回の学習により、Pythonの場合はオブジェクトの要素を取り出して利用するということを理解できました。そのために必要なinの存在も改めて知ることができました。