この記事で分かること
- Pythonのrange関数を使うメリットが分かる
- range関数の具体的な使い方が分かる
Pythonのrange配列をfor文で使う概要
この記事では、Pythonの「range」という関数で作った配列をfor文で使う方法を説明します。「range」は、「数値が連続した配列を作る」という役割を持った関数です。引数を2つ指定した場合には、指定した2つのある整数から整数までを順番に配列(リスト形式)を提供してくれる関数です。
この記事の構成としては、どのような場合に関数「range」が効果的に使われるかが分かるように、3つのプログラムを書いています。それぞれのケースを比較して、関数「range」がどのように使われるかを説明します。
Pythonのrange配列をfor文で使う前提環境
rangeの使い方の説明の環境は、下の記事で説明している私の環境と同じ環境で確認しています。
レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。
もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。
Pythonのrange配列をfor文で使うサンプルプログラム
ここでは、2010年から2019年までの年で、それぞれの年の1月1日から12月31日までの期間を表示するプログラムを題材に、合計3つのプログラムを示します。
1つ目と2つ目は関数「range」を使わない比較的非効率なプログラム、3つ目に関数「range」を使ったプログラムを紹介します。
- 関数「range」を使わないサンプルプログラム(その1)
- 関数「range」を使わないサンプルプログラム(その2)
- 関数「range」を使ったサンプルプログラム
1.関数「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)
- 変数「start_list」を2010年から2019年までの1月1日の日付で初期化する
- 変数「end_list」を2010年から2019年までの12月31日の日付で初期化する
- 変数「start_list」と「end_list」をぞれぞれを1つずつ変数「start_day」と「end_day」に入れて繰り返す
- 変数「start_day」と「end_day」の内容を表示する
実行結果
表示は下記のようになりました。
$ 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
2.関数「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")
- 2010年から2019年までのを1つずつ変数「year」に入れて繰り返す
- 変数「year」の内容を表示する
実行結果
表示は下記のようになり、先ほどのプログラムと同じ結果になりました。
$ 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
3.関数「range」を使ったサンプルプログラム
サンプルプログラムの作成
上の2つのサンプルプログラムを、関数「range」を使い、2010から2019までの整数のリストを作成しながら、for文を回し、その整数(年数)を文字列に変換し、表示していくプログラムに変更しました。
また、先程と同様に1月1日と12月31日は固定なので、for文の外で、文字列変数の「start_day」と「end_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)
- 変数「start_day」を文字列「-01-01」で初期化する
- 変数「end_day」を文字列「-12-31」で初期化する
- rangeを使って2010年から2019年までのを1つずつ変数「year」に入れて繰り返す
- 変数「year」「start_day」「end_day」の内容を表示する
実行結果
もちろん、実行結果は、先ほどの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