検索
連載

[Python入門]for文による繰り返し処理Python入門(2/3 ページ)

Pythonに限らずプログラミングの世界では「繰り返し処理」は必須の機能だ。Pythonでこれを行うための「for文」を取り上げる。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

for文とrange関数による繰り返し処理

 先ほどの例ではfor文の「反復可能オブジェクト」部分に文字列を置いていた。この場合、for文ではその要素の数だけ繰り返し処理が行われる。つまり、何回繰り返すかは要素の数で変わる。その一方で、「決まった回数」だけループしたいこともある。そのときに使うのが、Pythonが標準で提供するrange関数だ。以下にrange関数の構文を示す。

range(stop)

range関数の構文(一部)

 シンプルなrange関数は、整数値を1つだけ引数stopに取る。この場合、range関数は「0〜引数stopの値−1」の範囲にある整数を繰り返しのたびに1つずつ返す「反復可能オブジェクト」を作成する。引数を2つ、または3つ指定するバージョンもあるが、これについては次回紹介する。

 for文とrange関数を組み合わせたコードの例を以下に示す。

for number in range(10):
    print(number)

for文とrange関数の組み合わせ

 このコードでは、range関数の引数stopに「10」を渡しているので、反復処理のたびに「0〜引数stopの値−1」の範囲の整数、つまり「0〜9」の値がループ変数numberに渡される(繰り返し回数は「10回」となる)。繰り返し処理のブロックでは、ループ変数numberに代入された値を表示しているだけだ。これをセルに入力して実行したところを以下に示す。

10回の繰り返し処理を行ったところ
10回の繰り返し処理を行ったところ

 決まった回数の繰り返しといったが、実際には先ほどのリストを使ったコードはfor文とrange関数を組み合わせて次のように書き直せる。

message = 'Hello Python'
str_count = len(message)

for index in range(str_count):
    print(message[index])

range関数から返される値を文字列のインデックスとして使用する

 len関数は第6回「文字列の操作」の「文字数を求める:len関数」でも紹介したが、これは文字列やリストなどの「要素数」を求める関数だ。よって、上のコードでは、変数str_countには文字列messageの文字数(12)が代入される。ということは、「range(str_count)」は「range(12)」と同じことであり、これによりループのたびにループ変数indexには0〜11の整数値が順次代入される。そのため、「print(message[index])」では、文字列の各要素が画面に表示される。このコードの実行結果を以下に示す。

range関数から返される値を文字列のインデックスとして使用する
range関数から返される値を文字列のインデックスとして使用する

 文字列やリストの要素に対して反復処理を行うのに、このような書き方をする必要はないが、両方のやり方があることは覚えておこう。

for文のelse節

 他のプログラミング言語ではあまり見られないが、Pythonのfor文(とwhile文)にはif文と同様に「else節」がある。for文のelse節は「反復可能オブジェクトの要素がなくなった」「反復処理のブロックでエラー(例外)が発生した」タイミングで実行される。構文的には次のようになる。

for ループ変数 in 反復可能オブジェクト:
    ブロック
else:
    反復処理終了時に実行するブロック

else節を持つfor文

 簡単には、for文のelse節は「反復処理が終了した直後に実行する処理を記述する」と考えられる。以下に簡単な例を示す。

for num in range(5):
    print(num)
else:
    print('terminated')

else節を持つfor文の例

 これを実行すると、0〜5の各値が表示された後に、「terminated」と表示される。

else節は繰り返し処理の終了後に実行される
else節は繰り返し処理の終了後に実行される

 このことからは、上のコードは次のコードと同じことだと思う人もいるだろう。

for num in range(5):
    print(num)

print('terminated')

else節の処理をfor文の後で実行されるコードとした

 この場合、for文での繰り返し処理が終了したら、「terminated」と必ず表示される。これに対して、for文のelse節は「繰り返し処理が終了した後で実行されるコード」を書くところだ。同じことをいっているように思えるかもしれないが、そうではない場合もある。これについては後で取り上げよう。

for文とリスト

 for文はリストと組み合わせることで、大きな力を発揮する。これについてはリストを説明する回で詳しく取り上げるが、ここでリストとは次のようなものだと考えてほしい。

  • リストにはいろいろな種類のデータを好きなだけ格納できる
  • リストに保存された一つ一つのデータのことを「要素」と呼ぶ
  • リストは角かっこ「[]」で表し、その中にカンマ区切りで要素を並べていく
  • リストは反復可能オブジェクトであり、for文で順番にその要素を取り出せる
  • リストの要素は角かっこ「[]」にインデックスを指定することで取り出せる
  • 要素のインデックスは「0始まり」
リスト
リスト

 リストと文字列には、「その要素を順番に取り出せる」という共通の特徴がある。先ほどのfor文では文字列の要素を順番に取り出したのと同じように、リストに幾つものデータを保存しておいて、後からそれをfor文で順次処理できるということだ。一例として簡単なコードを紹介しておこう。

names = ['一色', 'かわさき', '遠藤']

for name in names:
    print(name)

for文でのリストの利用例

 変数namesに代入しているのがリストだ(文字列とリストの違いはあっても、for文の書き方が変わっていないことに注意しよう)。このリストには、3つの文字列('一色'、'かわさき'、'遠藤')を格納している。次のfor文では、それらをループ変数nameに順番に与えて、画面に表示している。実行結果は次のようになる。

リストの要素も順番に処理できた
リストの要素も順番に処理できた

 Pythonでプログラムを作るときには、リスト(あるいはリストによく似た「データをまとめて格納しておく」ことが可能なさまざまなオブジェクト)はよく使う。また、それを扱う際にはfor文と組み合わせることも多い。

 for文は文字列やリストなどの要素に対する反復処理や、決まった回数の繰り返し処理を行うために使う。

Copyright© Digital Advantage Corp. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る