介紹
- range 是一個類,不是函式
- 表示不可變的數字序列,通常用於在 for 迴圈中迴圈指定的次數
兩種語法格式
range(stop)
- 表示區間 [0, stop) 內的整數序列
- 該區間從 0 開始、到 stop 結束,不包含 stop
range(start, stop[, step])
- 表示區間 [start, stop) 內的整數序列
- 該區間從 start 開始、到 end 結束,不包含 end
- step 是步進,預設是 1
step 的取值規則
- 如果 step 為正值,確定 range 某個值的公式為
r[i] = start + step*i
其中i >= 0
且r[i] < stop
- 如果 step 為負值,確定 range 某個值的公式仍然為
r[i] = start + step*i
,但限制條件改為i >= 0
且r[i] > stop
返回值
都是 range 例項物件
一些簡單的栗子
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25] >>> tuple(range(0, 10, 3))
(0, 3, 6, 9)>>> set(range(0, -10, -1))
{0, -1, -2, -3, -4, -5, -6, -7, -8, -9} >>> list(range(0))
[] >>> list(range(1, 0))
[]
range 的優勢
相比常規的 list、tuple,range 的優勢在於range 物件總是佔用固定數量的較小記憶體,無論其所表示的範圍有多大
range 的特性
range 物件實現了 collections.abc.Sequence ,提供了包括 index、索引、切片等特性
r = range(0, 20, 2)
print(r)
print(list(r)) # in
print(10 in r)
print(11 not in r) # index
print(r.index(6)) # 切片
print(r[2])
print(r[-1]) # 輸出結果
range(0, 20, 2)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
True
True
3
4
18
但是切片僅支援索引取值 [ ],不支援 [ : ] 來取值
==、!= 操作
使用 ==
和 !=
檢測 range 物件是否相等是將其作為序列來比較
r1 = range(0, 4, 2)
r2 = range(0, 3, 2)
print(r1 == r2) # 輸出結果
True
迴圈遍歷 range
for item in range(3):
print(item) # 輸出結果
0
1
2