python

【python】rangeで配列を作る【→3つの具体例で理解しやすい】

1月 22, 2020

how to create range list by python
プログラム学生
Pythonのrangeって関数、どういう時に便利なんですか?
例えば、「日付でこの日からこの日っていう指定があった場合」は、0や1始まりではない途中の数字を扱う場合が多いよね?そのような場合にrangeは便利に使えるよ。例を使って説明するね。
Tommy

pythonのrangeで配列を作る概要

summary of creating range list

この記事では、pythonのrangeの使い方を説明します。

rangeは、「数値が連続した配列を作る」という役割を持った関数です。

また、引数を2つ指定した場合には、指定した2つのある整数から整数までを順番に配列(リスト形式)を提供してくれる関数です。

「どのような場合にrangeが効果的に使われるか」が分かるように、3つのプログラムを書いています。

それぞれのケースを比較して、rangeがどのように使われるかを説明します。

pythonのrangeで配列を作る前提環境

environment of creating range list

rangeの使い方の説明の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

オススメ
how to check version in python
【python】バージョン確認の方法【→プログラミング初心者向け】

続きを見る

レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

オススメ
how to programming on rental server
レンタルサーバでプログラミングする方法【→ブログのサーバでできる!】

続きを見る

pythonのrangeで配列を作るサンプルプログラム

sample program of creating range list

ここでは、2010年から2019年までの年で、それぞれの年の1月1日から12月31日までの期間を表示するプログラムを題材に、3つのプログラムを示します。

1つ目と2つ目はrangeを使わない比較的非効率なプログラム、3つ目にrangeを使った例を書きます。

rangeを使わないサンプルプログラム1

2つの日付を表す文字列のリストを準備して、それらを1つずつ取り出しながら、表示していくプログラムです。リストの初期化に書く量が多い為、あまり効率が良いとは言えません。

if __name__ == '__main__':

	start_list = ("2010-01-01","2011-01-01","2012-01-01","2013-01-01","2014-01-01","2015-01-01","2016-01-01","2017-01-01","2018-01-01","2019-01-01")
	end_list = ("2010-12-31","2011-12-31","2012-12-31","2013-12-31","2014-12-31","2015-12-31","2016-12-31","2017-12-31","2018-12-31","2019-12-31")

	for start_day, end_day in zip(start_list,end_list):
		print(start_day + ' ~ ' + end_day)

rangeを使わない実行結果1

表示は下記のようになりました。

$ python test.py
2010-01-01 ~ 2010-12-31
2011-01-01 ~ 2011-12-31
2012-01-01 ~ 2012-12-31
2013-01-01 ~ 2013-12-31
2014-01-01 ~ 2014-12-31
2015-01-01 ~ 2015-12-31
2016-01-01 ~ 2016-12-31
2017-01-01 ~ 2017-12-31
2018-01-01 ~ 2018-12-31
2019-01-01 ~ 2019-12-31

rangeを使わないサンプルプログラム2

今度は、for文の中で、年だけの文字列のリストを回して、表示するように変更してみました。

変化するのは年の年数だけで、それぞれの年の日付は1月1日と12月31日だけなので、日付の部分は固定することができます。

これもfor文の宣言が長くなってしまい、2010年から2019年の文字列を書かなければいけない為、これもあまり効率いいとは言えないプログラムです。

if __name__ == '__main__':

	for year in ("2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"):
		print(year+"-01-01" + ' ~ ' + year+"-12-31")

rangeを使わない実行結果2

表示は下記のようになり、先ほどのプログラムと同じ結果になりました。

$ python test.py
2010-01-01 ~ 2010-12-31
2011-01-01 ~ 2011-12-31
2012-01-01 ~ 2012-12-31
2013-01-01 ~ 2013-12-31
2014-01-01 ~ 2014-12-31
2015-01-01 ~ 2015-12-31
2016-01-01 ~ 2016-12-31
2017-01-01 ~ 2017-12-31
2018-01-01 ~ 2018-12-31
2019-01-01 ~ 2019-12-31

rangeを使ったサンプルプログラム

そこで、rangeを使って、2010から2019までの整数のリストを作成しながら、for文を回し、その整数(年数)を文字列に変換し、表示していくプログラムに変更しました。

また、先程と同様に1月1日と12月31日は固定なので、for文の外で、文字列変数のstart_dayend_dayを定義しておきます。

1つ目や2つ目のプログラムより年数を文字列で書く量が減り、for文が随分スッキリしました。

if __name__ == '__main__':

	start_day = "-01-01"
	end_day = "-12-31"
	
	for year in range(2010,2020):
		print(str(year)+start_day + ' ~ ' + str(year)+end_day)

rangeを使う実行結果

もちろん、実行結果は、先ほどの2つのプログラムの結果と同じになりました。

$ python test.py
2010-01-01 ~ 2010-12-31
2011-01-01 ~ 2011-12-31
2012-01-01 ~ 2012-12-31
2013-01-01 ~ 2013-12-31
2014-01-01 ~ 2014-12-31
2015-01-01 ~ 2015-12-31
2016-01-01 ~ 2016-12-31
2017-01-01 ~ 2017-12-31
2018-01-01 ~ 2018-12-31
2019-01-01 ~ 2019-12-31

-python
-

© 2020 Tommy's blog Powered by AFFINGER5