Python列表乾貨:建立數字列表:range()函式用法
python range() 函式可建立一個整數列表,一般用在 for 迴圈中。
語法:
range(start, stop[, step])
引數說明:
- start: 計數從 start 開始。預設是從 0 開始。例如range(5)等價於range(0,5);
- stop: 計數到 stop 結束,但不包括 stop。例如:range(0,5) 是[0, 1, 2, 3, 4]沒有5
- step:步長,預設為1。例如:range(0,5) 等價於 range(0, 5, 1)
對於 range() 函式,有幾個注意點:
(1)它表示的是左閉右開區間;
(2)它接收的引數必須是整數,可以是負數,但不能是浮點數等其它型別;
(3)它是不可變的序列型別,可以進行判斷元素、查詢元素、切片等操作,但不能修改元素;
(4)它是可迭代物件,卻不是迭代器。
例子:
for i in range(2,11,2): print(i)
輸出:
2 4 6 8 10
還可以遞減輸出
for i in range(11,1,-4): print(i)
輸出:
11 7 3
建立數字列表:
使用list()函式將range()的結果直接轉化成列表。
print(list(range(2,11,2)))
輸出:
[2,4,6,8,10]
遍歷一個列表list:
list=[1,2,3,4,5,6,7]for i in range(len(list)): print(list[i])
輸出:
1 2 3 4 5 6 7
range()函式能夠建立任何需要的數字集,建立一個包含前10個整數的平方。
squares=[] #建立一個空列表 for value in range(1,11): square=value**2 #square臨時變數 squares.append(square) #append()函式增加列表元素 print(squares) #此處不需要縮排
輸出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
為了使程式碼更加簡潔,可以選擇不使用臨時變數square
squares=[] for in vaue range(1,11): squares.append(value**2) print(squares)
range()函式的不可修改性
三種基本序列型別:列表(list)、元組(tup)、範圍物件(range)。range是和列表與元組有著相同地位的基礎序列。除了range,字串也是不可改變的序列型別。
range序列的特殊性:
普通序列支援12種操作,range只支援10種,不支援進行加法拼接和乘法重複。
range(2)+range(3) TypeError: unsupported operand type(s) for +: 'range' and 'range' range(2)*2 TypeError: unsupported operand type(s) for *: 'range' and 'int'
那麼問題來了:同樣是不可變序列,為什麼字串和元組就支援上述兩種操作,而偏偏 range 序列不支援呢?雖然不能直接修改不可變序列,但我們可以將它們拷貝到新的序列上進行操作啊,為何 range 物件連這都不支援呢?
官方的回答:
…due to the fact that range objects can only represent sequences that follow a strict pattern and repetition and concatenation will usually violate that pattern.
原因是 range 物件僅僅表示一個遵循著嚴格模式的序列,而重複與拼接通常會破壞這種模式…
問題的關鍵就在於 range 序列的 pattern,它表示的就類似於等差數列,拼接兩個等差數列,或者重複拼接一個等差數列,其它修改動作也會破壞等差數列結構,所以這就是為啥 range 型別不支援這兩個操作的原因了。