スライドショー

【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で動作確認しました。

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文による繰り返し処理まとめ
更新日 : 2019年7月1日

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文の基本的な使い方を解説
更新日 : 2019年4月13日

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関数の引数を理解することで、より自由なリストを作ることが出来ます。使い方を忘れてしまったらぜひ、この記事を読み返してみてください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ryo

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説