[Python入門]for文による繰り返し処理:Python入門(2/3 ページ)
Pythonに限らずプログラミングの世界では「繰り返し処理」は必須の機能だ。Pythonでこれを行うための「for文」を取り上げる。
for文とrange関数による繰り返し処理
先ほどの例ではfor文の「反復可能オブジェクト」部分に文字列を置いていた。この場合、for文ではその要素の数だけ繰り返し処理が行われる。つまり、何回繰り返すかは要素の数で変わる。その一方で、「決まった回数」だけループしたいこともある。そのときに使うのが、Pythonが標準で提供するrange関数だ。以下にrange関数の構文を示す。
range(stop)
シンプルなrange関数は、整数値を1つだけ引数stopに取る。この場合、range関数は「0〜引数stopの値−1」の範囲にある整数を繰り返しのたびに1つずつ返す「反復可能オブジェクト」を作成する。引数を2つ、または3つ指定するバージョンもあるが、これについては次回紹介する。
for文とrange関数を組み合わせたコードの例を以下に示す。
for number in range(10):
print(number)
このコードでは、range関数の引数stopに「10」を渡しているので、反復処理のたびに「0〜引数stopの値−1」の範囲の整数、つまり「0〜9」の値がループ変数numberに渡される(繰り返し回数は「10回」となる)。繰り返し処理のブロックでは、ループ変数numberに代入された値を表示しているだけだ。これをセルに入力して実行したところを以下に示す。
決まった回数の繰り返しといったが、実際には先ほどのリストを使ったコードはfor文とrange関数を組み合わせて次のように書き直せる。
message = 'Hello Python'
str_count = len(message)
for index in range(str_count):
print(message[index])
len関数は第6回「文字列の操作」の「文字数を求める:len関数」でも紹介したが、これは文字列やリストなどの「要素数」を求める関数だ。よって、上のコードでは、変数str_countには文字列messageの文字数(12)が代入される。ということは、「range(str_count)」は「range(12)」と同じことであり、これによりループのたびにループ変数indexには0〜11の整数値が順次代入される。そのため、「print(message[index])」では、文字列の各要素が画面に表示される。このコードの実行結果を以下に示す。
文字列やリストの要素に対して反復処理を行うのに、このような書き方をする必要はないが、両方のやり方があることは覚えておこう。
for文のelse節
他のプログラミング言語ではあまり見られないが、Pythonのfor文(とwhile文)にはif文と同様に「else節」がある。for文のelse節は「反復可能オブジェクトの要素がなくなった」「反復処理のブロックでエラー(例外)が発生した」タイミングで実行される。構文的には次のようになる。
for ループ変数 in 反復可能オブジェクト:
ブロック
else:
反復処理終了時に実行するブロック
簡単には、for文のelse節は「反復処理が終了した直後に実行する処理を記述する」と考えられる。以下に簡単な例を示す。
for num in range(5):
print(num)
else:
print('terminated')
これを実行すると、0〜5の各値が表示された後に、「terminated」と表示される。
このことからは、上のコードは次のコードと同じことだと思う人もいるだろう。
for num in range(5):
print(num)
print('terminated')
この場合、for文での繰り返し処理が終了したら、「terminated」と必ず表示される。これに対して、for文のelse節は「繰り返し処理が終了した後で実行されるコード」を書くところだ。同じことをいっているように思えるかもしれないが、そうではない場合もある。これについては後で取り上げよう。
for文とリスト
for文はリストと組み合わせることで、大きな力を発揮する。これについてはリストを説明する回で詳しく取り上げるが、ここでリストとは次のようなものだと考えてほしい。
- リストにはいろいろな種類のデータを好きなだけ格納できる
- リストに保存された一つ一つのデータのことを「要素」と呼ぶ
- リストは角かっこ「[]」で表し、その中にカンマ区切りで要素を並べていく
- リストは反復可能オブジェクトであり、for文で順番にその要素を取り出せる
- リストの要素は角かっこ「[]」にインデックスを指定することで取り出せる
- 要素のインデックスは「0始まり」
リストと文字列には、「その要素を順番に取り出せる」という共通の特徴がある。先ほどのfor文では文字列の要素を順番に取り出したのと同じように、リストに幾つものデータを保存しておいて、後からそれをfor文で順次処理できるということだ。一例として簡単なコードを紹介しておこう。
names = ['一色', 'かわさき', '遠藤']
for name in names:
print(name)
変数namesに代入しているのがリストだ(文字列とリストの違いはあっても、for文の書き方が変わっていないことに注意しよう)。このリストには、3つの文字列('一色'、'かわさき'、'遠藤')を格納している。次のfor文では、それらをループ変数nameに順番に与えて、画面に表示している。実行結果は次のようになる。
Pythonでプログラムを作るときには、リスト(あるいはリストによく似た「データをまとめて格納しておく」ことが可能なさまざまなオブジェクト)はよく使う。また、それを扱う際にはfor文と組み合わせることも多い。
for文は文字列やリストなどの要素に対する反復処理や、決まった回数の繰り返し処理を行うために使う。
Copyright© Digital Advantage Corp. All Rights Reserved.