Pythonで連番のリスト作成 range関数〜飛び飛びの連番も作れるよ!〜

スポンサーリンク

連番のリスト作成の関数 range

今回は連番のリストを作るための関数 range に関しての解説です。

まずはどういうものかというと、0から9までの整数のリストを作りたい時、関数を使わずにやろうとすると、こうなります。

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(a)

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

まぁ10くらいまでなら頑張って作ってもいいかなと思うのですが、これが100とか1000とかまでの連番を作るときはめんどくさいですよね。

それを関数でやらせようというのが、range関数です。

まずは一番簡単に使う方法を紹介します。

a = range(10)

print(a)

実行結果
range(0, 10)

これで0から9まで10個の数字でリストが作られました。

でもリストの形になっていないですよね。

リストの形で表示したい場合は、list()をつけてあげます。

a = range(10)

print(list(a))

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

上の例ではlist()をprint関数の方に付けましたが、range(10)に付けても大丈夫です。

a = list(range(10))

print(a)

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

この場合、リストのインデックスと同様、0から開始されることに注意してください。

この連番のリストは一体どこで使うでしょうか?

スポンサーリンク

rangeを使う場面

個人的によく使うのは、あるリストに対して、その要素数の回数だけある処理をしたい時に使っています。

words = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]

for w, i in zip(words, range(len(words))):
    print("index : " + str(i) + " word : " + w)

実行結果
index : 0 word : a
index : 1 word : b
index : 2 word : c
index : 3 word : d
index : 4 word : e
index : 5 word : f
index : 6 word : g
index : 7 word : h
index : 8 word : i
index : 9 word : j

上の例では一気に色々出てきたので、ちょっと解説。

まずはfor関数です。

Pythonで繰り返し処理 for関数の超基本的な使用法
Pythonで繰り返し処理をするための関数Pythonで繰り返し処理するには、2つの関数が存在します。1つは今回紹介するfor関数で、もう1つはwhile関数です。簡単に違いをいうと、ある特定の回数の繰り返し処理す...

これは繰り返しの関数でしたね。

また「in」の後にあるzipは複数のリストを同時に繰り返す場合の関数でした。

range(len(words))は、まずlen(words)で、wordsに含まれる要素の数を取得しています。

Pythonのリスト(配列)の基本〜プログラミング初心者はまずはこれだけ〜
リストとは?今回はリストとか配列と呼ばれる仕組みに関して解説します。前に変数に関して、説明しました。その時、変数名と変数は一対一の関係でした。list1 = "Hello World"print(...

その後、range関数で、要素数に対する整数の連番のリストを作成しています。

次のprintの行で、表示させるのですが、range(len(words))で作成した連番のリストを1つずつ i に代入し、表示させています。

ただし、print関数で他の文字列も表示させているため、データ型があっていないため、str()で数値を文字列へと変換しています。

また + を用いて、文字列を連結しています。

Pythonのデータ型(str、int、float)と四則演算
Pythonの覚えておきたいデータ型出力する関数print、リスト、繰り返し関数for、条件分岐の関数ifを解説したところで、そろそろ「データ型」に関しても説明したいと思います。こういった関...

個人的にはこの使い方をすることが多い気がしますが、色々なところに使える関数なので、覚えておいて損はないです。

スポンサーリンク

rangeの範囲を指定する場合

でも0からの連番でないけども、連番が欲しい場合があることでしょう。

例えば、3から10までの連番が欲しい時、そんなときは2つの数値をrange関数に入れることで作ることができます。

a = list(range(3, 10))

print(a)

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

3と10を入れると、3から10までと勘違いしてしまいがちですが、実際には3から10−1までのリストが作成されます。

スポンサーリンク

飛び飛びの連番を作成する場合

連番といっても、飛び飛びの連番が欲しい場合もあるでしょう。

飛び飛びの連番という日本語が正しいか分からないですが、2、4、6、8、10とか2、5、7、9、11とかの連番のことです。

その場合は、さらに何個飛びかという数字をrange関数に追加します。

a = list(range(3, 20, 2))

print(a)

実行結果
[3, 5, 7, 9, 11, 13, 15, 17, 19]

これで3から19まで1個飛びの数字のリストが得られます。

2個飛びにする場合は、最後の数字を3にします。

a = list(range(3, 20, 3))

print(a)

実行結果
[3, 6, 9, 12, 15, 18]

これで飛び飛びの連番のリストを自由自在に作ることができます!と言いたいところですが、実はこのrange関数が使えるのは整数だけです。

小数を入れるとエラーが表示されます。

開始の数字を少数にしてみます。

a = list(range(3.5, 20, 3))

print(a)

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = list(range(3.5, 20, 3))
      2 
      3 print(a)

TypeError: 'float' object cannot be interpreted as an integer

次に終わりの数字を少数にしてみます。

a = list(range(3, 20.5, 3))

print(a)

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = list(range(3, 20.5, 3))
      2 
      3 print(a)

TypeError: 'float' object cannot be interpreted as an integer

最後に何個飛びかという数字を少数にしてみます。

a = list(range(3, 20, 3.5))

print(a)

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = list(range(3, 20, 3.5))
      2 
      3 print(a)

TypeError: 'float' object cannot be interpreted as an integer

少数の連番を作成したい場合は、また他の関数を使う必要がありますが、それはまた今度紹介することにします。

とりあえずrange関数に関してはこんな感じです。

次回は数値計算ライブラリ numpyに関して解説をしていきます。

Pythonの数値計算ライブラリ numpy〜リスト作成と四則演算、そして行列の入れ替え〜
数値計算ライブラリ numpyとは?numpyはPythonで数値を扱う時に非常に役に立つライブラリです。何が役に立つかと言うと、ある数字をリスト内の数字全てに対して計算したり、2つのリスト同士の計算が出来たり。さ...

ということで今回はこんな感じで。

コメント

タイトルとURLをコピーしました