相關閱讀:
前言
前面有幾篇文章講解了怎麼創建和使用列表,以及在列表中數據量過大的時候如何循環操作列表。今天我們來學習一下,如何快速的創建數值列表以及如何對列表進行切片。
1. 創建數值列表
需要存儲一組數字的原因有很多,例如,在數據可視化中,處理的幾乎都是數字(溫度、距離、人口等)組成的集合。
列表非常適合用於存儲數字集合,Python 也提供了很多工具,幫助我們高效地處理數字列表。
1.1 使用函數 range()
Python 函數 range()
讓我們能輕鬆地生成一系列數字。例如,像下面這樣打印一組數字:
for value in range(1, 5):
print(value)
運行上述代碼,會打印數字1~5(不包含5)。
我們嘗試在編譯器運行一下這段代碼,結果如題1-1:
通過上面簡單地演示可以看出來,range(a,b)
函數會輸出 [a,b)的數字。
所以,使用 range()
時,如果輸出不符合預期,請嘗試將指定的值加1或減1。
讓我們更深入地認識一下 range() 函數
range(stop)
- stop: 計數到 stop 結束,但不包括 stop。默認從 0 開始,例如 range(5) 等價於 range(0, 5)
range(start, stop[, step])
-
start: 計數從 start 開始,包括 start。
-
stop: 計數到 stop 結束,但不包括 stop。
-
step: 步長。默認爲1,例如 range(0, 5) 等價於 range(0, 5, 1)
關於步長
或許第一次接觸編程的同學會對步長的含義有些迷糊,這裏解釋一下。
先看上面的代碼,range(1,5),因爲第三個參數沒傳,所以步長默認爲1,輸出的結果爲 1 2 3 4
,每個數之間相差1。
所以如果我們想輸出 1 3 5 7
,每個數之間相差2的一系列數,需要將 step 設置爲2,代碼如下:
for value in range(1, 10, 2):
print(value)
1.2 使用 range()
創建數字列表
大體上有 3 種使用 range() 創建數字列表的方法。下面讓我們來一一講解。
1.2.1 使用 list()
函數創建列表
要創建數字列表,可以使用函數 list()
將 range()
的結果直接轉換成列表。
numbers = list(range(1, 5))
print(numbers)
結果如圖1-2:
使用函數 range()
還可指定步長。例如,下面代碼打印1~10內的奇數:
odd_numbers = list(range(1, 10, 2))
print(odd_numbers)
在這個示例中,函數 range()
從 1 開始,然後不斷地加2,直到達到或超過終值(10),結果輸出如下圖1-3:
1.2.2 for
循環創建列表
list()
創建列表非常地方便,然而它並不能滿足我們的所有創建數字列表的需求,比如,我需要一個數字列表,這個列表包含前10個整數(1~10)的平方。
這種列表就沒法用 list()
函數來創建啦,不怕,我們有新方法:
squares = []
for value in range(1, 11):
square = value**2
squares.append(square)
print(squares)
首先,我們創建了一個空列表;
接下來,使用 range()
函數讓 Python 遍歷 1~10 的值;
然後,在循環中計算當前值的平方,並將結果存儲到變量 square 中;
接着,將新計算得到的平方值附加到列表 squares 中;
最後,循環結束,打印列表 squares。
運行這段代碼,結果如圖1-4:
1.2.3 列表解析
前面介紹的生成列表 squares 的方式包含四五行代碼,而列表解析讓你只需編寫一行代碼就能生成這樣的列表。列表解析將 for
循環和創建元素的代碼合併成一行,並自動地附加新元素。
下面使用 列表解析 來創建前面看到的平方數列表:
squares = [value**2 for value in range(1,11)]
print(squares)
可以看到,我們在聲明的列表 []
中定義了一個表達式,用於生成我們要儲存到列表中的值。
在這個示例中,表達式爲 value**2
,它計算平方值,其後的 for
循環將值1~10提供給表達式 value**2
。
請注意,這裏的 for 語句末尾沒有冒號
如果你不能理解,可以先背下來,這在以後會被多次的用到,運用的多了就能理解了。
結果與我們前面寫的平方數列表相同,如圖1-5:
以上的三種方法都可以用來生成數字列表,選擇適合的方法就行。
2. 切片
之前的幾篇文章,我們學習瞭如何訪問單個列表元素,也學習瞭如何處理列表中的所有元素。其實我們還可以處理列表的部分元素,這部分元素 Python 稱之爲切片。
2.1 切片的基本用法
要創建切片,需要指定要使用的第一個元素和最後一個元素的索引。
語法規則如下:
# 假設 lst 是一個列表
lst[a:b] # 截取 lst 列表下標範圍[a,b)的元素並作爲新列表返回
下面的示例處理的是一個運動隊成員列表:
players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[0:3])
運行這段代碼,結果如圖2-1:
可以看到,輸出的是一個列表,包含前三名隊員,對應的下標分別是:0、1和2。
你可以生成列表的任何子集,例如,如果你要提取列表的第2~4個元素,可將起始索引指定爲1,並將終止索引設置爲4:
players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[1:4])
這一次,切片始於“張括”,終於“張怡寧”,如圖2-2:
如果沒有指定第一個索引,Python 將自動從 0 開始:
players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[:4])
由於沒有指定起始索引,Python 從列表開頭開始提取,結果如圖2-3:
要讓切片終止於列表末尾,也可使用類似的語法。例如,要提取從第4個元素到列表末尾的所有元素,可以將起始索引指定爲3,並省略終止索引:
players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[3:])
Python 將返回從第4個元素到列表末尾的所有元素,如圖2-4:
無論列表多長,這種語法都能讓你輸出從特定位置到列表末尾的所有元素。
負數索引返回裏列表末尾相應距離的元素,因此我們可以輸出列表末尾的任何切片
例如,我們需要我們輸出最後三名隊員,我們可以:
players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[-3:])
運行這段代碼,結果如圖2-5:
上述代碼打印出了最後三名隊員的名字,即使隊員名單的長度發生變化,也依然如此。
2.2 遍歷切片
如果要遍歷列表的部分元素,可在 for
循環中使用切片。
在下面的示例,我們遍歷前三名隊員,並打印他們的名字:
players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print("前三名運動員:")
for player in players[:3]:
print(player)
這次 for
循環只遍歷了列表的前三名隊員,結果如圖2-6:
結尾語
本篇文章簡單地介紹了怎麼樣創建數字列表和如何使用列表切片。
雖然文章中給的例子都很簡單,但我還是希望有心學好 Python 的初學者能親手敲一下這些代碼。
如果你在學習過程中有任何疑問,可以關注文章下方↓↓↓的公衆號及時與我聯繫,我們相互討論,共同學習。
最後,祝你學有所成。