需要存儲一組數字的原因有很多,例如,在游戲中,需要跟蹤每個角色的位置,還可能需要跟蹤玩家的幾個最高得分。
在數據可視化中,處理的幾乎都是由數字(如溫度、距離、人口數量、經度和緯度等)組成的集合。
列表非常適合用於存儲數字集合,而Python提供了很多工具,可幫助高效地處理數字列表。
使用函數range()
Python函數range()能夠生成一系列的數字。例如,可以像下面這樣使用函數range()來打印一系列的數字:
for value in range(1,5):
print(value)
上述代碼好像應該打印數字1~5,但實際上它不會打印數字5:
>>>
1
2
3
4
>>>
函數range()從指定的第一個值開始數,並在到達指定的第二個值后停止,因此輸出不包含第二個值(這里為5)。要打印數字1~5,
需要使用range(1,6)。使用range()時,如果輸出不符合預期,請嘗試將指定的值加1或減1。
使用range()創建數字列表
要創建數字列表,可使用函數list()將range()的結果直接轉換為列表。
如果將range()作為list() 的參數,輸出將為一個數字列表。
在前一節的示例中,打印了一系列數字。要將這些數字轉換為一個列表,可使用list():
numbers = list(range(1,6))
print(numbers)
結果如下:
>>>
[1, 2, 3, 4, 5]
>>>
使用函數range()時,還可指定步長。
例如,下面的代碼打印1~10內的偶數:
even_numbers = list(range(2,11,2))
print(even_numbers)
在這個示例中,函數range()從2開始數,然后不斷地加2,直到達到或超過終值(11),因此輸出如下:
>>>
[2, 4, 6, 8, 10]
>>>
使用函數range()幾乎能夠創建任何需要的數字集,例如,如何創建一個列表,其中包含前10個整數(即1~10)的平方呢?
在Python中,兩個星號(**)表示乘方運算。下面的代碼演示了如何將前10個整數的平方加入到一個列表中:
squares = []
for value in range(1,11):
square = value**2
squares.append(square)
print(squares)
首先創建了一個空列表;接下來,使用函數range()讓Python遍歷1~10的值。
在循環中,計算當前值的平方,並將結果存儲到變量square中。然后,將新計算得到的平方值附加到列表squares 末尾。
最后,循環結束后,打印列表squares:
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>>
為讓這些代碼更簡潔,可不使用臨時變量square ,而直接將每個計算得到的值附加到列表末尾:
squares = []
for value in range(1,11):
squares.append(value**2)
print(squares)
在循環中,計算每個值的平方,並立即將結果附加到列表squares的末尾。
創建更復雜的列表時,可使用上述兩種方法中的任何一種。
有時候,使用臨時變量會讓代碼更易讀;
而在其他情況下,這樣做只會讓代碼無謂地變長。
首先應該考慮的是,編寫清晰易懂且能完成所需功能的代碼;等到審核代碼時,再考慮采用更高效的方法。
對數字列表執行簡單的統計計算
有幾個專門用於處理數字列表的Python函數。
找出數字列表的最大值、最小值和總和:
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))
>>>
0
9
45
>>>
列表解析
前面介紹的生成列表squares的方式包含三四行代碼,而列表解析讓你只需編寫一行代碼就能生成這樣的列表。列表解析將for循環和創建新元素的代碼合並成一行,並自動附加新元素。
squares = [value**2 for value in range(1,11)]
print(squares)
要使用這種語法:
首先指定一個描述性的列表名,如squares;
然后,指定一個左方括號,並定義一個表達式,用於生成你要存儲到列表中的值。
在這個示例中,表達式為value**2 ,它計算平方值。
接下來,編寫一個for 循環,用於給表達式提供值,再加上右方括號。
在這個示例中,for 循環為for value in range(1,11) ,它將值1~10提供給表達式value**2 。
請注意,這里的for 語句末尾沒有冒號。
squares = [value/2 for value in range(1,11)]
print(squares)
print(squares[len(squares)-1])
結果:
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
5
要創建自己的列表解析,需要經過一定的練習,
當編寫三四行代碼生成列表有點繁復時,就應考慮創建列表解析了。