Python/レンジ
< Python
レンジ
編集レンジ( 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が現れます)
「Python/組込み関数#range」も参照
レンジと演算子
編集- レンジと演算子
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'>
脚註
編集- ^ “3.10.1 Documentation » The Python Standard Library » Built-in Types” (2021年12月16日). 2021年12月16日閲覧。