繰り返しの処理をもっとクールに!

前回はfor文をやりました。

 

 

今回はfor文の相棒とも言うべきrenge()関数です。

range()関数の役割はfor文のために数列を作ることです。とにもかくにも、その使い方を公式チュートリアルに掲載されている例に見ていきましょう。

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

for分のシーケンス型を指定する部分にrange(5)と書かれています。どうやら、range()関数は0から1ずつカウントアップする数字を指定された数字の一歩手前までをもつシーケンスのようです。つまり、[0, 1, 2, 3, 4]というリストということでしょうか?。実は、ちょっと違います。試しに対話モードでrange(5)の出力を確認しましょう。

>>> print(range(5))
range(0, 5)

range(5)の出力はrange(0, 5)です。何のことだかよくわかりませんが、とりあえずリスト型を出力しているわけではなさそうです。range()関数がリストと違うのは、最初から0〜4までの数字を持っているのではなく、for文の繰り返しのたびに作っているという点です。このことは、繰り返しの回数が少ないときにはあまり大きな差がありませんが、1万回とかの繰り返しをするときに利点となります。何が、良いのかというと、コンピューターが1万個のデータを予め記憶する必要がないということです。コンピュータがデータを記憶するためにはどうしてもメモリ容量を使ってしまいます。リストを使って1万個のデータを溜め込んでおくより、単純な数列ならrange()を使ったほうがメモリ消費が少なく済むんです。

 

range()はもう少し応用が効きます。公式チュートリアルの例で見てみましょう。

range(5, 10)
   5, 6, 7, 8, 9

range(0, 10, 3)
   0, 3, 6, 9

range(-10, -100, -30)
  -10, -40, -70

renge()関数に2つの数値を指定すると、1つめが始まりの数値になります。また、3つ目を指定すると次の数値までのステップになります。また、これら3つの数値には負の数を指定することも可能です。指定する数値はいずれもint型である必要があるので注意してください。何ができて、何ができないのか、いろいろ試して見るのにリストで出力できると便利です。

>>> list(range(5,14,2))
[5, 7, 9, 11, 13]

list()関数はrange()関数を指定するとリストに変換してくれます。これを使っていろいろ試してみてください!

 

次回はbreak 文と continue 文とループの else 節を取り上げます。