【Python基礎】連番、飛び飛びの連番のリスト作成 range関数

  • URLをコピーしました!
目次

連番のリスト作成の関数 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文です。

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

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

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

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

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

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

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

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

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に関して解説をしていきます。

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

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次