No.046【Python】range関数について

![python-logo-master-v3-TM-flattened.png](https://qiita-image-store.s3.amazonaws.com/0/336067/8fb9f6aa-57f7-dc4b-b4bf-a648969d315c.png)

####今回は、range関数ついて書いていきます。
I'll write about "range function".

###■ Python3における range()関数
&emsp;&emsp;range function on Python3

     ここでは、Python3におけるrange関数の使い方を紹介する
     
    
```
>>> # Python3には x range()はない
>>> # range()のみ
>>> 
>>> print(xrange(3))
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    print(xrange(3))
NameError: name 'xrange' is not defined
```

     range():range型のオブジェクトを返す

```
>>> print(range(5))
range(0, 5)
>>> 
>>> print(type(range(5)))
<class 'range'>
>>> 
>>> for i in range(5):
	print(i)

	
0
1
2
3
4
```

     リストを生成したい場合はlist()を使う。
```
>>> print(list(range(5)))
[0, 1, 2, 3, 4]
```
 

###■ 連番(0から任意の値までの): range(stop)
&emsp;Serial numbers(from 0 to the optional value)

```
例：range(stop)の引数に整数を1つ指定
　　0 ≦ i < stopの連番を生成
```

```
>>> print(list(range(5)))
[0, 1, 2, 3, 4]
>>> 
>>> print(list(range(15)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
```

     負の値指定の場合、空となる

```
>>> print(list(range(-5)))
[]
```

###■ 任意の範囲内の連番: range(start / stop)
&emsp;Serial numbers within the optional range

```
range(start, stop)：引数に整数を2つ指定
start ≦ i < stopの連番を生成
stop ≦ startの場合は、空となる
```

```
>>> print(list(range(5, 10)))
[5, 6, 7, 8, 9]
>>> 
>>> print(list(range(10, 5)))
[]
>>> 
>>> print(list(range(-5, 5)))
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> 
>>> print(list(range(5, -5)))
[]
```
    Startを0としたrange(0, stop)はrange(stop)と等価

```
>>> print(range(0, 5) == range(5))
True
```
###■ 任意範囲または増分の等差数列: range(start, stop, step)
&emsp;Arithmetic progression for the optional range or incremental

```
range(startm stop, step)；引数に整数を3つ指定
start ≦ i < stop
stepずつ増加する等差数列を生成
stepに負の値を指定：減少
start ≦ stopでない場合、空となる
```

```
>>> print(list(range(1, 10, 4)))
[1, 5, 9]
>>> 
>>> print(list(range(10, 4, 2)))
[]
>>> 
>>> print(list(range(10, 4, -2)))
[10, 8, 6]
>>> 
>>> print(list(range(1, 10, -4)))
[]
```
```
stepを1としたrange(start, stop, 1)
range(start, stop)と等価。
```
```
>>> print(range(4, 10, 1) == range(4, 10))
True
```

```
startを0としたrange(0, stop, 1)
range(0, stop)およびrange(stop)と等価
```

``` 
>>> print(range(0, 10, 1) == range(0, 10) == range(10))
True
``` 
###■ 逆順range関数
&emsp;Reverse ordered range function

```
第三引数stepに負の値を指定:減少する連番および等差数列を生成
任意のrange()の逆順も生成可能
しかし、start・stopと合わせて適切な値を指定が必要
```
```
>>> print(list(range(4, 10, 3)))
[4, 7]
>>> 
>>> print(list(range(7, 1, -2)))
[7, 5, 3]
```
    reversed()を使うと結果は、逆順となる

```
>>> print(list(reversed(range(4, 10, 3))))
[7, 4]
```

```
reversed()の場合:for文で使う場合、list()は不要。
```

```
>>> for i in reversed(range(3, 12, 2)):
	print(i)

	
11
9
7
5
3
```

###■ 浮動小数点数(float)の場合
&emsp;In case of float

```
整数(integer)のみ、range()の引数に指定可能
浮動小数点数(float)指定：エラー
```

```
>>> print(list(range(0.1, 1.0, 0.4)))
Traceback (most recent call last):
  File "<pyshell#59>", line 1, in <module>
    print(list(range(0.1, 1.0, 0.4)))
TypeError: 'float' object cannot be interpreted as an integer
```

```
浮動小数点数の等差数列生成の場合：リスト内包表記
```

```
>>> print([i / 10 for i in range(4, 12, 2)])
[0.4, 0.6, 0.8, 1.0]
```

```
浮動小数点数との積を使用時、誤差が生じる場合がある
```

```
>>> print([i * 0.1 for i in range(4, 10, 2)])
[0.4, 0.6000000000000001, 0.8]
>>> 
>>> print([round(i * 0.1, 1) for i in range(4, 10, 2)])
[0.4, 0.6, 0.8]
```

```
NumPyの場合：np.arange()
np.arange()の引数の指定は、range()と同様
浮動小数点数(float)を指定可能。
```
```
>>> import numpy as np

>>> print(np.arange(5))
[0 1 2 3 4]
>>> 
>>> print(np.arange(34, 10))
SyntaxError: invalid syntax
>>> 
>>> print(np.arange(2, 10))
[2 3 4 5 6 7 8 9]
>>> 
>>> print(np.arange(2, 10, 1))
[2 3 4 5 6 7 8 9]
>>> 
>>> print(np.arange(0.4, 1.0, 0.1))
[0.4 0.5 0.6 0.7 0.8 0.9]

```


随時に更新していきますので、<br>定期的な購読をよろしくお願いします。
I'll update my article at all times.
So, please subscribe my articles from now on.

本記事について、<br>何か要望等ありましたら、気軽にメッセージをください！
If you have some requests, please leave some messages! by You-Tarin