[Python入門]for文による繰り返し処理:Python入門(1/3 ページ)
Pythonに限らずプログラミングの世界では「繰り返し処理」は必須の機能だ。Pythonでこれを行うための「for文」を取り上げる。
* 本稿は2019年5月10日に公開された記事を、Python 3.11.5で動作確認したものです(確認日:2023年9月11日)。
前回はPythonの制御構造の一つである「if文」を取り上げた。次に「繰り返し処理」を行うための制御構造を今回と次回の2回に分けて紹介しよう。今回はfor文を取り上げる。
今回の目次
繰り返し処理とは
プログラムのよいところは、人にとっては面倒くさいことであっても、文句をいうことなく黙って繰り返し実行してくれるところだ。例えば、文字列を構成する一つ一つの要素を1文字ずつ画面に表示したいとする。繰り返し処理を使わなければ、これは次のようになる(実行結果は省略)。
message = 'Hello Python'
print(message[0])
print(message[1])
print(message[2])
print(message[3])
print(message[4])
print(message[5])
print(message[6])
print(message[7])
print(message[8])
print(message[9])
print(message[10])
print(message[11])
文字列の要素を指定するインデックスが違うだけなのに、何行も同じことを書いている。これを書くのに「面倒くさいなぁ」と思う人がほとんどのはずだ。繰り返し処理が威力を発揮する場面の一つがこうした場合である。Pythonでは上と同じことを次のコードで実現できる(このコードについては後述する)。
message = 'Hello Python'
for ch in message:
print(ch)
とても短いコードで同じことを実現できるのが分かるはずだ。このような「複数のデータを連続的に処理したい」場合には「繰り返し処理」が役立つ(繰り返し処理のことを「ループ」と呼ぶこともある)。この他にもコンピュータの内部ではさまざまな形で繰り返し処理が行われている。例えば、WindowsやmacOSなどのGUIを備えたOSでは、ユーザーがアプリやOSとやりとりするために「ユーザーの操作を受け付ける→その操作に応じた処理を実行する→ユーザーの操作を受け付ける→……」といった処理が繰り返されている。これも繰り返し処理の一種だ。つまり、コンピュータのプログラムを作る上では「繰り返し処理」は欠かすことができないものだ。
そして、Pythonでは繰り返し処理を行う構文として、「for文」と「while文」が提供されている。
for文は「0個以上のデータの一つ一つに対して、連続的に処理を実行する」ために使う(0個のデータを与えた場合は実質的には何もしない)。while文は「何らかの条件が成立している間、指定された処理を繰り返す」ために使用する。今回はこのうちのfor文について見ていく。
for文
上述した通り、for文は「0個以上のデータを与えて、それらに対して毎回同様な処理を実行する」ものだ。「0個以上のデータ」とは例えば、「0個以上の文字が連なっている」文字列や、本連載ではまだきちんと紹介していないが「複数のデータを一括して取り扱えるリスト」などのことだ。文字列やリストは単一の変数に代入可能だが、その要素を1つずつ取り出せる。これらのデータのことを「反復可能オブジェクト」や「シーケンス」などと呼ぶこともある。取り出したデータをfor文に渡すことで、個々の要素を順次処理できるというわけだ。
for文の一般的な構文は次のようになる。
for ループ変数 in 反復可能オブジェクト:
ブロック
上の構文の「反復可能オブジェクト」というところには、文字列やリスト、あるいは反復可能オブジェクトを返す関数の呼び出しなどを書ける(リストについては、第6回の「文字列の分割:splitメソッド」で少し触れたが、詳しくは後続の回で取り上げる予定だ)。
「ループ変数」には、繰り返し処理(ループ)の中で、反復可能オブジェクトから取り出した要素の値が代入される。その要素を使って処理を行う部分を上で「ブロック」と書いた部分に記述する。それから、for文の1行目の末尾にはコロン(:)を付けるのを忘れないようにしよう。
ブロックは「for ループ変数 in 反復可能オブジェクト:」と書いた部分よりも、右側にくるように「インデント」を付けて書く。インデントを付けられた部分がfor文で実行されるブロックであると、Pythonは認識する。また、インデント幅は1つのブロックで共通である必要がある。
例えば、文字列を構成する各文字をfor文を使って1つずつ画面に表示してみよう。ここでは変数messageに文字列'Hello Python'を代入し、その要素を表示するものとする。先ほど「繰り返し処理」の例として挙げたものと同じだ。
上に示した構文の「反復可能オブジェクト」の位置には変数messageを書く。「ループ変数」の名前は「character」から取って「ch」としよう。これにより、繰り返しのたびに変数messageの各文字がループ変数chに代入されるようになる。そして、「ブロック」の部分では、ループ変数に与えられた文字をprint関数で表示するだけだ。
よって、このコードは次のように書ける。
message = 'Hello Python'
for ch in message:
print(ch)
これを実行すると次のようになる。
変数messageに代入されている文字列'Hello Python'を構成する文字が1つずつ画面に表示されているのが分かるはずだ。
なお、反復可能オブジェクトに要素がないときには(空文字列や空のリストなど)、for文のブロックは実行されない。上のコードで変数messageに空文字列を代入して、コードを実行してみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.