Python range関数の書き方は?for文/listとの組み合わせを紹介!

コラムCOLUMN

Python range関数の書き方は?for文/listとの組み合わせを紹介!

2021/03/03

プログラムは、同じ処理を繰り返し何千回、何万回と正確に行うのが得意です。

プログラミング言語において繰り返し処理を行うのによく使われるのはfor文ですが、Pythonではfor文とrange関数をセットで使うことが多いです。

また、range関数はlist型を作成するのにも用いられます。

ここでは、Pythonのrange関数についての基本的な説明と、for文やlist型と組み合わせて使う場合の使用例を解説します。

Pythonのrange関数とは?

複数の要素をまとめて扱う仕組みをシーケンスと呼びます。

Pythonでは、range関数を使えばシーケンスの生成ができます。

range(start, end, step)という書式で記述します。

startは開始地点を指定します。

startを省略した場合は0が指定されます。

endは必須です。

endに指定した値から-1した値でシーケンスは終了します。

stepは増加分を表します。

デフォルトで1が指定されており正順となります。

stepに指定した値の分、シーケンスが増えていきます。

stepに負数を指定するとシーケンスを逆順にすることができます。

●range(3)
→ 0, 1, 2(startは省略されているのでデフォルトの0、endが3の直前の2、endは省略されているのでデフォルトの1ずつ正順で増加)

●range(2, 5)
→ 2, 3, 4(startが2、endが5の直前の4、stepは省略されているのでデフォルトの1ずつ正順で増加)

●range(2, -1, -1)
→ 2, 1, 0(startが2、endが−1の直前の0、stepは−1なので逆順で1ずつ減少)

●range(0, 11, 2)
→ 0, 2, 4, 6, 8, 10(startが0、endが11の直前の10、stepに2が指定されているので2ずつ正順で増加)

for文とrangeの組み合わせ

for文は繰り返し処理に用いられます。

for文内のブロック(字下げされた文のかたまり)が繰り返し実行されます。

for文とrange関数を組み合わせたもっともシンプルな使用例は以下のとおりです。

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

[実行結果]
0
1
2
3
4

rangeの中身がxに代入され順に表示されます。

print()は画面にメッセージを表示するPythonの関数です。

Pythonのrange関数でlistを作成

rangeはlist型に変換することが可能です。

range(生成数)という記述をすれば、0から始まる生成数個分のオブジェクトを作ることができます。

たとえば、list(range(100))と記述すれば、0から99の100個の要素が生成されます。

listを実際に作ってみる

listを作成する際は、[]で要素を囲みます。

test_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(test_list)

[実行結果]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

上記の例では、要素を一つずつ記述していますが、listの引数にrange関数を指定することで簡単にリストが作成できます。

endのみ指定した場合は、0からend-1までの連続した数値のリストが作成されます。

test_list = list(range(10))
print(test_list)

[実行結果]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

start、endで範囲指定した場合は、startで指定した値からend-1までの連続した数値のリストが作成されます。

test_list = list(range(3, 10))
print(test_list)

[実行結果]
[3, 4, 5, 6, 7, 8, 9]

startには負数を指定することもできます。

test_list = list(range(-3, 10))
print(test_list)

[実行結果]
[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

start、end、stepで範囲と増分を指定した場合は、startで指定した値からend-1まで、stepで指定した増分ごとのリストが作成されます。

startとstepの値を工夫することで、偶数のリスト、奇数のリストなどを作成することができます。

test_list = list(range(1, 10, 2))
print(test_list)

[実行結果]
[1, 3, 5, 7, 9]

逆順のlistを作る方法

range関数の引数stepに負数を指定することで逆順のリストを作ることができます。

test_list = list(range(10, 0, -1))
print(test_list)

[実行結果]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

stepの値を変えることでリストの中身も変わります。

test_list = list(range(10, 0, -2))
print(test_list)

[実行結果]
[10, 8, 6, 4, 2]

range関数の引数に矛盾がある場合、空のリストを作成します。

次の例では、逆順リストにもかかわらず、endにstartより大きな値が指定されているため、空のlistが作成されています。

test_list = list(range(3, 10, -1))
print(test_list)

[実行結果]
[]

 

pythonのrange関数

Pythonのrange関数で小数を扱う方法

これまでの例では、range関数の引数にしてきたのは整数のみです。

range関数では小数を扱えません。

小数を指定するとエラーとなります。

test_list = list(range(1.0))

[実行結果]
TypeError: 'float' object cannot be interpreted as an integer

range関数で小数を表現するには、少し工夫する必要があります。

例をあげてみましょう。

test_list = [x / 10 for x in range(10)]
print(test_list)

[実行結果]
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

xに代入された整数を10で割ることで小数を表現しています。

ちなみに、xに0.1をかけると誤差が生じる場合があります。

これは、0.1がコンピュータの中では0.10000000…という単位で誤差を持っているためです。

xを10で割る場合は、整数同士の計算のため誤差が発生しません。

test_list = [x * 0.1 for x in range(10)]
print(test_list)

[実行結果]
[0.0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6000000000000001, 0.7000000000000001, 0.8, 0.9]

このような場合は、round関数を用いて誤差を修正できます。

round()は、小数を整数に丸める関数です。

test_list = [round(x * 0.1, 1) for x in range(10)]
print(test_list)

[実行結果]
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

rangeとxrangeの違いとは?

Pythonのバージョンには2系と3系がありますが、この2つには互換性がありません。

range関数も2系と3系では動作が異なります。

これまで説明してきたのはバージョン3系のrange関数の動作です。

バージョン3系のrange関数がrange型のオブジェクトを返すのに対し、バージョン2系のrange関数はリストを返します。

バージョン3系のrange関数

print(range(3))

[実行結果]
range(0, 3)

バージョン2系のrange関数

print(range(3))

[実行結果]
[0, 1, 2]

xrangeの使用例

バージョン3系のrange関数は、バージョン2系のxrange関数に相当します。

バージョン2系はxrange型のオブジェクトを返します。

print(xrange(3))

[実行結果]
xrange(3)

for x in xrange(3):
print(x)

[実行結果]
0
1
2

上記のようにfor文を実行する場合、バージョン3系のrange関数は引数で指定した要素数分メモリを確保するのに対し、バージョン2系のxrange関数はfor文で取り出す際に値を生成するためメモリを節約できます。

ただ、その違いは気にするほどのものではありません。

バージョン3系でのrange関数が、バージョン2系のxrange関数に近しいものになったため、xrange関数はバージョン3系では廃止されました。

バージョン3系ではrange関数のみとなります。

まとめ

Pythonのrange関数について、基本的な構文、for文やlist型と組み合わせた場合の使用例を説明してきました。

理解は進みましたでしょうか。

Pythonで繰り返し処理を行う際に、range関数はとても便利です。

引数の組み合わせにより、奇数・偶数のリスト、逆順のリストなどさまざまなリストを作ることができます。

range関数を自由に使いこなせることができれば、Pythonで構築できるプログラムの幅がとても広がることでしょう。

今後、Pythonのスキルをより向上させていきたいのであれば、フリーランスエンジニアとして活動は有効な手段となります。

フリーランスエンジニアは、企業からは即戦力としての力を見込まれおり、自社社員だけでは対応しきれない高度なプログラミング業務を依頼されることがあるためです。

また、フリーランスエンジニアは、長期案件に参画することもあり、中長期的なスキル・キャリア形成が望める場合もあります。

フリーランスエンジニアとして、システム開発のコアとなる部分に関わることで、スキルを向上させ、自身の市場価値を上げていくことに繋がっていきます。

当社が運営するi-common tech」は、フリーランスITエンジニア専門のエージェントサービスで、Python 案件が多数あります。

直接エンドユーザーのシステム開発に携わることで、よりコアな部分の開発を任されることもあり、スキルアップを見込むことができます。

Pythonエンジニアとしてスキルアップ、キャリアアップを目指した人は、「i-common techに登録してみてはいかがでしょうか。