レンジ

編集

レンジ( range )は、等差数列を表すシーケンスです[1]

コンストラクター

編集

レンジにリテラルはありません。 コンストラクターである組込み関数 range()を使って生成します。

コンストラクター
print(f"""\
{range(5)=}
{range(2,20)=}
{range(2,20,3)=}
{list(range(5))=}
{list(range(2,20))=}
{list(range(2,20,3))=}
""")
実行結果
range(5)=range(0, 5)
range(2,20)=range(2, 20)
range(2,20,3)=range(2, 20, 3)
list(range(5))=[0, 1, 2, 3, 4]
list(range(2,20))=[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
list(range(2,20,3))=[2, 5, 8, 11, 14, 17]
range関数の引数は変則的で、1つの場合はstart=0が仮定されます(str()・repr()・print()などで文字列化すると隠れた0が現れます)

レンジと演算子

編集
レンジと演算子
rng = range(2,50,3)
print(f'''\
{rng=} {list(rng)=}
{rng.start=} {rng.stop=} {rng.step=} 
{rng[1]=}
{rng[-1]=}
{rng[2:10:2]=} {list(rng[2:10:2])=}
{rng[2:10]=} {list(rng[2:10])=}
{rng[:10]=} {list(rng[:10])=}
{rng[2:]=} {list(rng[2:])=}
{rng == range(2,24,3)=}
{rng != range(2,24,3)=}
{7 in rng=}
''')
実行結果
rng=range(2, 50, 3) list(rng)=[2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47]
rng.start=2 rng.stop=50 rng.step=3 
rng[1]=5
rng[-1]=47
rng[2:10:2]=range(8, 32, 6) list(rng[2:10:2])=[8, 14, 20, 26]
rng[2:10]=range(8, 32, 3) list(rng[2:10])=[8, 11, 14, 17, 20, 23, 26, 29]
rng[:10]=range(2, 32, 3) list(rng[:10])=[2, 5, 8, 11, 14, 17, 20, 23, 26, 29]
rng[2:]=range(8, 50, 3) list(rng[2:])=[8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47]
rng == range(2,24,3)=False
rng != range(2,24,3)=True
7 in rng=False
レンジの要素は、インデックス演算子で参照できます。
レンジ内の要素の順位はタプルやレンジと同じく、0番から始まります。
負のインデクスiは、len(self)+iを表します。
レンジにスライス記法を適用すると、レンジが返ります。
レンジ同士は、比較ができます。
整数がレンジに含まれるかは、in演算子で検査できます。

for文との組み合わせ

編集

レンジは、for文の対象となるシーケンスとして使えます(これが一番一般的な使用例でしょう)。

コード例
for i in range(5):
    print(i)
実行結果
0
1
2
3
4

レンジのフィールド一覧

編集
レンジのフィールド一覧
obj = range(5)
for i in dir(obj):
    print(i, eval(f"type({obj}.{i})"))
実行結果
__bool__ <class 'method-wrapper'>
__class__ <class 'type'>
__contains__ <class 'method-wrapper'>
__delattr__ <class 'method-wrapper'>
__dir__ <class 'builtin_function_or_method'>
__doc__ <class 'str'>
__eq__ <class 'method-wrapper'>
__format__ <class 'builtin_function_or_method'>
__ge__ <class 'method-wrapper'>
__getattribute__ <class 'method-wrapper'>
__getitem__ <class 'method-wrapper'>
__gt__ <class 'method-wrapper'>
__hash__ <class 'method-wrapper'>
__init__ <class 'method-wrapper'>
__init_subclass__ <class 'builtin_function_or_method'>
__iter__ <class 'method-wrapper'>
__le__ <class 'method-wrapper'>
__len__ <class 'method-wrapper'>
__lt__ <class 'method-wrapper'>
__ne__ <class 'method-wrapper'>
__new__ <class 'builtin_function_or_method'>
__reduce__ <class 'builtin_function_or_method'>
__reduce_ex__ <class 'builtin_function_or_method'>
__repr__ <class 'method-wrapper'>
__reversed__ <class 'builtin_function_or_method'>
__setattr__ <class 'method-wrapper'>
__sizeof__ <class 'builtin_function_or_method'>
__str__ <class 'method-wrapper'>
__subclasshook__ <class 'builtin_function_or_method'>
count <class 'builtin_function_or_method'>
index <class 'builtin_function_or_method'>
start <class 'int'>
step <class 'int'>
stop <class 'int'>

脚註

編集
  1. ^ 3.10.1 Documentation » The Python Standard Library » Built-in Types” (2021年12月16日). 2021年12月16日閲覧。