1. 程式人生 > 實用技巧 >Python列表乾貨:建立數字列表:range()函式用法

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 型別不支援這兩個操作的原因了。