Python range()快速初始化數位列表

2020-07-16 10:05:02

注意:本節需具備最基本的 Python 迴圈結構的基礎,初學者可先跳過本節。

實際場景中,經常需要儲存一組數位。例如在遊戲中,需要跟蹤每個角色的位置,還可能需要跟蹤玩家的幾個最高得分。在資料視覺化中,處理的幾乎都是由數位(如溫度、距離、人口數量、經度和緯度等)組成的集合。

列表非常適合用於儲存數位集合,並且 Python 提供了 range() 函數,可幫助我們高效地處理數位列表,即便列表需要包含數百萬個元素,也可以快速實現。

Python range() 函數能夠輕鬆地生成一系列的數位。例如,可以像如下這樣使用 range() 來列印一系列數位:
for value in range(1,5):
    print(value)
輸出結果為:

1
2
3
4

注意,在這個範例程式中,range() 只是列印數位 1~4,因為range() 函數的用法是:讓 Python 從指定的第一個值開始,一直數到指定的第二個值停止,但不包含第二個值(這裡為 5)。

因此,如果想要上面程式列印數位 1~5,需要使用 range(1,6)。


另外需要指明的是,range() 函數的返回值並不直接是列表型別(list),例如:

>>> type([1,2,3,4,5])
<class 'list'>
>>> type(range(1,6))
<class 'range'>

可以看到,range() 函數的返回值型別為 range,而不是 list。而如果想要得到 range() 函數建立的數位列表,還需要借助 list() 函數,比如:

>>> list(range(1,6))
[1, 2, 3, 4, 5]

可以看到,如果將 range() 作為 list() 的引數,其輸出就是一個數位列表。

不僅如此,在使用 range() 函數時,還可以指定步長。例如,下面的程式碼列印 1~10 內的偶數:
even_numbers = list(range(2,11,2))
print(even_numbers)
在這個範例中,函數 range() 從 2 開始數,然後不斷地加 2,直到達到或超過終值,因此輸出如下:

[2, 4, 6, 8, 10]

注意,即便 range() 第二個引數恰好符合條件,最終建立的數位列表中也不會包含它。


實際使用時,range() 函數常常和 Python 迴圈結構、推導式(後續會講,這裡先不涉及)一起使用,幾乎能夠建立任何需要的數位列表。

例如,建立這樣一個列表,其中包含前 10 個整數(即1~10)的平方,實現程式碼如下:
squares = []
for value in range(1,11):
    square = value**2
    squares.append(square)
print(squares)
執行結果為:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]