レンジ型

概要

レンジ型は数列を表現するためのシーケンス型の型です。 リストと同じようにループで使用したりインデックスを使った操作ができます。

レンジ型の特徴

Range型は簡単な規則性を持った数列を表現するための型です。 「1,2,3,4,5...,100」といった連番だけなく、 「1,3,5,7,...99」といった決まった数を飛ばした数列を作ることができます。

Range型のインスタンスはリストや文字列と同じシーケンスに分類されます。 そのため、for文やインデックスを使った操作ができます。

よく利用される場面としてはループを一定回数繰り返したり、 リスト型に変換して数列を含むリストを使うといったものがあげられます。

レンジ型の基本操作

0からNまでの数列の作成

range型の数列はrange関数で作成します。

range関数の使い方はオプション次第ですが、引数を一つだけ渡した場合は0から「引数の値-1」までの数列を作ります。

>>> a = range(10)
>>> print(a)
range(0, 10)

レンジ型はリストにキャストすることができます。

>>> a = range(10)
>>> b = list(a)
>>> print(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

レンジ型はリストに比べると巨大な数列を効率的に使うことができます。 今回は要素を見やすくするために変換していますが、 あえてリストに変換する必要がない場面では無駄なキャストは避けて下さい。

MからNまでの数列の作成

range型に引数を2つ渡した場合は第一引数から「第二引数の値-1」までの数列を作ります。

>>> a = range(5, 10)
>>> print(a)
range(5, 10)

>>> b = list(a)
>>> print(b)
[5, 6, 7, 8, 9]

LからMまで、N飛ばしの数列を作成

range型に第三引数まで与えると、第三引数の間隔で数値を飛ばした第一引数から「第二引数の値-1」までの数列を作ります。

>>> a = range(0, 10, 3)
>>> print(list(a))
[0, 3, 6, 9]

必ずしも「第二引数の値-1」が数列に含まれるわけではありません。 第三引数でのスキップ間隔から外れてしまうと、第二引数に一番近い小さい値が最後の要素となります。

>>> a = range(0, 10, 2)
>>> print(list(a))
[0, 2, 4, 6, 8]

range型で一定回数のループ

ループ処理を書く際に「X回繰り返したい」という場合があります。 while文とカウンタでその処理を書くということもできますが、range型を使うとよりトラブルの少ないコードが書けます。

x = 5
for i in range(x):
  print(i)
0
1
2
3
4

whileを使うとカウンタの操作をループ内部でするため、 条件分岐の結果次第でカウントし忘れるなどという初歩的なミスが発生するかもしれません。 range型とforを使えば繰り返しの回数がループのコードブロック内の処理に依存しません。