【Python入門】range関数を使ってリストを作ろう!

こんにちは。ryoです。

range関数は連続した数字のオブジェクトを作る機能を持った関数です。

range関数をよく見かけるけど使い方がよくわからない
range関数でリストを作成する方法を詳しく知りたい
range関数をfor文で使う方法について詳しく知りたい

ここでは、そんな悩みを抱えている方にrange関数について、以下の内容を解説していきます。

  • 【基礎】range関数とは
  • 【基礎】range関数の基本的な使い方
  • 【基礎】range関数で逆順のリストを作る方法
  • 【基礎】range関数をfor文の中で使う方法
  • 【発展】range関数で少数を扱う方法
  • 【発展】Python2とPython3のrange関数の違い

range関数について、初心者の方でもわかるように解説していますので、ぜひ参考にしてください。

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

range関数とは

range関数は、連続した数字のオブジェクトを作るための関数です。range関数は非常にシンプルな機能を持っていますが、Python2とPython3では仕様が大きく変わっているので気をつけましょう。

この記事ではPython3のrange関数について説明していきます。基本的な使い方を学んだ後に、Python2のrange関数との違いを見ていきましょう!

range関数の基本的な使い方

range関数の使い方は非常にシンプルです。試しにIPythonで、0〜9までの値のうち、偶数の値のみのリストを作ってみましょう。IPythonはPythonでよく使われる対話型のコンソールになります。

In [1]: list(range(0,10,2)) 
Out[1]: [0, 2, 4, 6, 8]

このサンプルコードでは、list関数の中でrange関数を使ってリストを作っています。引数が3つ<もあるので分かりにくいかもしれませんが、順番に見ていきましょう。第一引数には数列の最初の数字を入れています。

デフォルトは0になっているので、0から始まるオブジェクトを作るのであれば、省略できます。第二引数には数列の最後の数字の次の数字を渡しています。ここでは10になっているので、0~9の範囲の等差数列を作ります。これは省略出来ません。

第三引数には数列の数と数の間のステップ幅を指定しています。ここではステップ幅は2になっています。デフォルトでは1になっているので、ステップ幅が1ならば省略できます。ここで、逆順の数列を作りたい場合はどうすればよいでしょうか。

In [2]: list(range(10,0))
Out[2]: []

10から始まって0の一つ前で終わる数列を考えると、なんとなく逆順になってくれる事を期待してしまいます。ですが実際は、次の章で紹介する方法を使わないと空になってしまいます。基本的な使い方を学んだ後に、Python2のrange関数との違いを見ていきましょう!

range関数で逆順のリストを作る方法

list関数とrange関数で作ったリストは、通常は昇順(1,2,3,4,5,…)になっています。

しかし、これを降順(…,5,4,3,2,1)にすることもできます。まずは実際に、サンプルコードを見ていきましょう。

In [3]: list(range(10,0,-1))
Out[3]: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
 
In [4]: list(range(10,-1,-2))
Out[4]: [10, 8, 6, 4, 2, 0]
 
In [5]: list(range(10)[::-1])
Out[5]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

サンプルコードにあるように、range関数の第三引数にマイナスの値を指定することによって、逆順にすることができます。第三引数はsteを表していましたね。-1を指定した場合は降順に1つずつ、-2にした場合は降順に2ずつ値が変化しているリストが出来上がりました。

また、Pythonのスライスという機能を使うことで、In[5]のようにrange関数の引数を使わずに降順のリストをつくることもできます。

range関数をfor文の中で使う方法

range関数はfor文と一緒に使われることが多い関数です。例えば、5回ループして数字をprint関数で表示するだけの簡単なコードを考えてみましょう。

In [8]: for i in range(5):
   ...:     print(i)
   ...:

# 以下、実行結果
0
1
2
3
4

このような形で、for文を好きな回数だけ回したいときに使われます。for文自体について、またfor文とrange関数を組み合わせて使うことについて、詳しくはこちらの記事解説しています。

【Python入門】for文の使い方とは?基礎 + 応用的な使い方を解説
更新日:2024年5月6日

range関数で小数を扱う方法

range関数で作られる数列を小数にしたい場合もあります。

ただ、Pythonにはrange関数で小数を扱う方法が用意されていません。なので、自分で加工したコードを用意する必要があります。こちらのサンプルコードを見てみましょう。

for i in range(10):
    print(i*0.1)

実行結果

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9

このようにfor文でrange関数を使い、それぞれの値に0.1を掛けたものを表示することが出来ました。range関数で出力した値は、加工して使うことも出来ます。

Python3とPython2でのrange関数の違い

ここまでは、Python3を前提にrange関数の解説をしてきました。現在はPython3が主流になっていますが、Python2を使って実装されたライブラリやシステムを使う機会もまだまだ多いかもしれません。

ですので、ここからはPython2のrange関数についても解説したいと思います。Python2ではrange関数の他にxrange関数がありました。なぜこの関数があったのかは、forループとメモリの関係について、知っておく必要があります。

range(10000000)のようなとても長いループの中で処理を行うと、メモリの消費がとても大きくなってしまう問題があります。その問題を解決してくれていたのが、xrange関数でした。range関数とxrange関数は、上に書いたサンプルコードのように同じように使うことができます。

しかし、作られるオブジェクトが異なります

# Python2のコード
ra = range(10)
xra = xrange(10)
 
print(ra)
print(xra)

実行結果

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
xrange(10)

このようにPython2のrange関数を使うとリストを返してくれます。これに対してxrange関数はxrange(10)というオブジェクトを返していますね。これの中身はジェネレータと呼ばれるものです。

ジェネレータについて詳しくは以下の記事をご覧ください。

【Python入門】yield文の基本的な使い方を解説
更新日:2024年5月6日

xrange関数は「0〜9までの要素を、呼び出される毎に作って返してくれるオブジェクト」を返してくれています。つまり大きな数字を渡したときに、いきなりメモリ上に大きなリストを作ってしまうのがrange関数で、逐一要素を作って返してくれるのがxrange関数だったのです。

Python3ではxrange関数はなくなり、Python3のrange関数にまとめられました。なので、Python3のrange関数はリストを返さずにジェネレータオブジェクトを返します。だから、例えば0〜4の範囲のリストがほしいときは、list(range(5)と書かなければいけないんですね。

まとめ

ここでは、Python3のrange関数の使い方を解説してきました!

  • range関数とは
  • range関数の基本的な使い方
  • range関数で逆順のリストを作る方法
  • range関数をfor文の中で使う方法
  • range関数で少数を扱う方法
  • Python2とPython3のrange関数の違い


for文と合わせて使う場面がとても多いのでrange関数を抑えておくと、for文で出来ることも増えます。また、range関数の引数を理解することで、より自由なリストを作ることが出来ます。使い方を忘れてしまったらぜひ、この記事を読み返してみてください!

なお、今Pythonを学習している方は以下の記事もどうぞ。

はじめてPythonを使う方でもわかりやすいように、Pythonでできることやその学習法などを中心にまとめています。

復習にも使えると思いますので、ぜひ一度ご覧になってみてくださいね。

Python 入門完全攻略ガイド

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次