range【レンジ型】

メモ

  • レンジ型
    • イミュータブル(変更不可) なシーケンス
    • 少量のメモリ使用 (最低限の値のみを保持)
    • 通常、for-in【for ループ】の固定数の繰り返しで使用 〔
    • sys.maxsize より大きい絶対値の要素可能 3.2
      但し、一部機能が OverflowError 例外 (例:要素数が sys.maxsize を超えた場合のlen【要素数】)
  • 属性 一覧〔
    属性 (取得のみ)備考
    start 3.3開始整数値
    step 3.3ステップ整数値
    stop 3.3終了整数値
  • メソッド 一覧
    メソッド
    コンストラクタ
    count()【要素出現回数】3.2
    index()【要素インデックス】3.2
  • 比較演算子〔
    比較演算子備考
    range1 == range2 要素を順に比較 (属性の比較なし) 3.3
    オブジェクト比較 3.2
    range1 != range2 要素を順に比較 (属性の比較なし) 3.3
    オブジェクト比較 3.2
    range1 is range2 オブジェクト比較
    range1 is not range2 オブジェクト比較
    【未サポート】
    range1 < range2
    range1 > range2
    range1 <= range2
    range1 >= range2
  • 共通 シーケンス演算  (共通のシーケンス演算) 〔
    該当レンジの変更なし
    【指定値】
    ij<0 3.2
    ij が省略 または None
    ij が範囲外
    【特記なしの動作】
    末尾からのインデックス ( len(range) + i・j :末尾が -1 )
    先頭 または 末尾 (k の正負により範囲が広がる位置)
    先頭 または 末尾 (近いほう)
    演算備考
    x in range レンジ range のある要素が x と等しければ True 、等しくなければ False
    x not in range レンジ range のある要素が x と等しければ False 、等しくなければ True
    【未サポート】
    range1 + range2
    レンジ range1 と レンジ range2 の結合
    【未サポート】
    range * n
    n * range
    レンジ rangen(整数) 回結合 (n<0:空のレンジ)
    注:参照のコピー
    range[i ] レンジ rangei 番目の要素
    範囲外:IndexError 例外
    range[[i] :[j]]  3.2 レンジ rangeij(含まない) 番目までの要素
    range[[i] :[j] :[k]]  3.2 レンジ rangeij(含まない) 番目までの k(省略:1) 番目 毎の要素
    0<k:先頭から末尾方向
    k<0:末尾から先頭方向・i は末尾側を指定 (範囲補正なし)
    k=0:不可 (ValueError 例外)
    len(range)レンジ range の要素数
    max(range)レンジ range の最大要素
    min(range)レンジ range の最小要素
    【未サポート】
    range.index(x  [, i [, j  ]])
    レンジ range 中で 要素 xij(含まない) の間で 最初に出現する位置インデックス
    未検出:ValueError 例外
    range.index(x) 3.2 レンジ range 中で 要素 x が最初に出現する位置インデックス
    未検出:ValueError 例外
    range.count(x) 3.2 レンジ range 中に 要素 x が出現する回数
  • 関連

例 (繰り返し処理・その他)

# 繰り返し処理
for i in range(3):
    print(i)
# 出力:0
# 出力:1
# 出力:2

for x in range(3):
    for y in range(2):
        print("x={} y={}".format(x, y))
# 出力:x=0 y=0
# 出力:x=0 y=1
# 出力:x=1 y=0
# 出力:x=1 y=1
# 出力:x=2 y=0
# 出力:x=2 y=1
# その他
import sys

rng = range(sys.maxsize + 1, sys.maxsize + 2)
print(len(rng))  # 出力:1
rng = range(sys.maxsize + 1)
#print(len(rng))  # OverflowError 例外

例 (属性)

rng = range(5)
print(rng)        # 出力:range(0, 5)
print(rng.start)  # 出力:0
print(rng.stop)   # 出力:5
print(rng.step)   # 出力:1

rng = range(2, 5)
print(rng)        # 出力:range(2, 5)
print(rng.start)  # 出力:2
print(rng.stop)   # 出力:5
print(rng.step)   # 出力:1

rng = range(1, 3, 2)
print(rng)        # 出力:range(1, 3, 2)
print(rng.start)  # 出力:1
print(rng.stop)   # 出力:3
print(rng.step)   # 出力:2

例 (比較演算子)

rng1 = range(5)
rng2 = range(5)
rng3 = range(3)

print(rng1 == rng2)  # 出力:True
print(rng1 == rng3)  # 出力:False

print(rng1 != rng2)  # 出力:False
print(rng1 != rng3)  # 出力:True

rng4 = range(1, 5, 3)
print(rng4)          # 出力:range(1, 5, 3)
print(list(rng4))    # 出力:[1, 4]

rng5 = range(1, 7, 3)
print(rng5)          # 出力:range(1, 7, 3)
print(list(rng5))    # 出力:[1, 4]
print(rng4 == rng5)  # 出力:True

rng6 = range(4, 0, -3)
print(rng6)          # 出力:range(4, 0, -3)
print(list(rng6))    # 出力:[4, 1]
print(rng4 == rng6)  # 出力:False
rng1 = range(5)
rng2 = range(5)
rng3 = rng1

print(rng1 is rng2)  # 出力:False
print(rng1 is rng3)  # 出力:True

print(rng1 is not rng2)  # 出力:True
print(rng1 is not rng3)  # 出力:False

例 (共通 シーケンス演算)

rng = range(5)

# x in range
print(1 in rng)  # 出力:True
print(5 in rng)  # 出力:False

# x not in range
print(1 not in rng)  # 出力:False
print(5 not in rng)  # 出力:True
# range[i]
rng = range(7)
print(rng[3])   # 出力:3
print(rng[-2])  # 出力:5
#print(rng[99])  # IndexError 例外
#print(rng[-99]) # IndexError 例外
# range[i:j]
rng = range(7)
print(list(rng[2:4]))    # 出力:[2, 3]
print(list(rng[2:-3]))   # 出力:[2, 3]
print(list(rng[-5:-3]))  # 出力:[2, 3]
print(list(rng[:4]))     # 出力:[0, 1, 2, 3]
print(list(rng[2:]))     # 出力:[2, 3, 4, 5, 6]
print(list(rng[:]))      # 出力:[0, 1, 2, 3, 4, 5, 6]
print(list(rng[-99:4]))  # 出力:[0, 1, 2, 3]
print(list(rng[2:99]))   # 出力:[2, 3, 4, 5, 6]
print(list(rng[-99:99])) # 出力:[0, 1, 2, 3, 4, 5, 6]
# range(i:j:k)
rng = range(7)
print(list(rng[1:6:2]))    # 出力:[1, 3, 5]
print(list(rng[1:-1:2]))   # 出力:[1, 3, 5]
print(list(rng[-6:-1:2]))  # 出力:[1, 3, 5]
print(list(rng[-99:99:2])) # 出力:[0, 2, 4, 6]
print(list(rng[5:1:-2]))   # 出力:[5, 3]
print(list(rng[-2:1:-2]))  # 出力:[5, 3]
print(list(rng[-2:-6:-2])) # 出力:[5, 3]
print(list(rng[1:5:-2]))   # 出力:[]
#print(list(rng[5:1:0]))    # ValueError 例外
print(list(rng[:6:2]))  # 出力:[0, 2, 4]
print(list(rng[1::2]))  # 出力:[1, 3, 5]
print(list(rng[1:6:]))  # 出力:[1, 2, 3, 4, 5]
print(list(rng[::2]))   # 出力:[0, 2, 4, 6]
print(list(rng[1::]))   # 出力:[1, 2, 3, 4, 5, 6]
print(list(rng[::]))    # 出力:[0, 1, 2, 3, 4, 5, 6]
# len(range)
rng = range(5)
print(list(rng))  # 出力:[0, 1, 2, 3, 4]
print(len(rng))   # 出力:5

rng = range(1, 5)
print(list(rng))  # 出力:[1, 2, 3, 4]
print(len(rng))   # 出力:4

rng = range(1, 6, 2)
print(list(rng))  # 出力:[1, 3, 5]
print(len(rng))   # 出力:3
rng = range(-3, 6, 2)

# min(range)
print(min(rng))  # 出力:-3
# max(range)
print(max(rng))  # 出力:5
# range.index(x)
rng = range(5)
print(list(rng))
# 出力:[0, 1, 2, 3, 4]
print(rng.index(1))  # 出力:1
print(rng.index(4))  # 出力:4
#print(rng.index(5))  # ValueError 例外
# range.count(x)
rng = range(5)
print(rng.count(0))  # 出力:1
print(rng.count(4))  # 出力:1
print(rng.count(5))  # 出力:0

コンストラクタ

構文

class range(stop)
class range(start, stop[,step])

start開始整数値 (上側の構文では 0)
stop終了整数値 (含まない)
stepステップ整数値 (省略:1)

【要素】
range[i]start+step*i (0 ≦ i)
stepが 正数range[i] < stop
stepが 負数stop < range[i]
stepが 0ValueError 例外

rng = range(5)
print(list(rng))  # 出力:[0, 1, 2, 3, 4]
rng = range(0, 5)
print(list(rng))  # 出力:[0, 1, 2, 3, 4]
rng = range(1, 5)
print(list(rng))  # 出力:[1, 2, 3, 4]
rng = range(0, 5, 1)
print(list(rng))  # 出力:[0, 1, 2, 3, 4]
rng = range(0, 5, 2)
print(list(rng))  # 出力:[0, 2, 4]
rng = range(1, 5, 2)
print(list(rng))  # 出力:[1, 3]
rng = range(5, 0, -1)
print(list(rng))  # 出力:[5, 4, 3, 2, 1]
rng = range(5, 0, -2)
print(list(rng))  # 出力:[5, 3, 1]
rng = range(5, 1, -2)
print(list(rng))  # 出力:[5, 3]
#rng = range(1, 5, 0)  # ValueError 例外