操作Python列表Ⅱ

相關閱讀:

前言

前面有幾篇文章講解了怎麼創建和使用列表,以及在列表中數據量過大的時候如何循環操作列表。今天我們來學習一下,如何快速的創建數值列表以及如何對列表進行切片。

1. 創建數值列表

需要存儲一組數字的原因有很多,例如,在數據可視化中,處理的幾乎都是數字(溫度、距離、人口等)組成的集合。

列表非常適合用於存儲數字集合,Python 也提供了很多工具,幫助我們高效地處理數字列表。

1.1 使用函數 range()

Python 函數 range() 讓我們能輕鬆地生成一系列數字。例如,像下面這樣打印一組數字:

for value in range(1, 5):
    print(value)

運行上述代碼,會打印數字1~5(不包含5)。

我們嘗試在編譯器運行一下這段代碼,結果如題1-1:
1-1

圖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:
1-2

圖1-2

使用函數 range() 還可指定步長。例如,下面代碼打印1~10內的奇數:

odd_numbers = list(range(1, 10, 2))
print(odd_numbers)

在這個示例中,函數 range() 從 1 開始,然後不斷地加2,直到達到或超過終值(10),結果輸出如下圖1-3:

1-3

圖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-4

圖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:
1-5

圖1-5

以上的三種方法都可以用來生成數字列表,選擇適合的方法就行。

2. 切片

之前的幾篇文章,我們學習瞭如何訪問單個列表元素,也學習瞭如何處理列表中的所有元素。其實我們還可以處理列表的部分元素,這部分元素 Python 稱之爲切片。

2.1 切片的基本用法

要創建切片,需要指定要使用的第一個元素和最後一個元素的索引。

語法規則如下:

# 假設 lst 是一個列表
lst[a:b] # 截取 lst 列表下標範圍[a,b)的元素並作爲新列表返回

下面的示例處理的是一個運動隊成員列表:

players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[0:3])

運行這段代碼,結果如圖2-1:
2-1

圖2-1

可以看到,輸出的是一個列表,包含前三名隊員,對應的下標分別是:0、1和2。

你可以生成列表的任何子集,例如,如果你要提取列表的第2~4個元素,可將起始索引指定爲1,並將終止索引設置爲4:

players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[1:4])

這一次,切片始於“張括”,終於“張怡寧”,如圖2-2:

2-2

圖2-2

如果沒有指定第一個索引,Python 將自動從 0 開始:

players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[:4])

由於沒有指定起始索引,Python 從列表開頭開始提取,結果如圖2-3:

2-3

圖2-3

要讓切片終止於列表末尾,也可使用類似的語法。例如,要提取從第4個元素到列表末尾的所有元素,可以將起始索引指定爲3,並省略終止索引:

players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[3:])

Python 將返回從第4個元素到列表末尾的所有元素,如圖2-4:

2-4

圖2-4

無論列表多長,這種語法都能讓你輸出從特定位置到列表末尾的所有元素。

負數索引返回裏列表末尾相應距離的元素,因此我們可以輸出列表末尾的任何切片

例如,我們需要我們輸出最後三名隊員,我們可以:

players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print(players[-3:])

運行這段代碼,結果如圖2-5:

2-5

圖2-5

上述代碼打印出了最後三名隊員的名字,即使隊員名單的長度發生變化,也依然如此。

2.2 遍歷切片

如果要遍歷列表的部分元素,可在 for 循環中使用切片。

在下面的示例,我們遍歷前三名隊員,並打印他們的名字:

players = ['劉恆', '張括', '馬龍', '張怡寧', '郭焱', '王亞楠', '丁寧']
print("前三名運動員:")
for player in players[:3]:
    print(player)

這次 for 循環只遍歷了列表的前三名隊員,結果如圖2-6:

2-6

圖2-6

結尾語

本篇文章簡單地介紹了怎麼樣創建數字列表和如何使用列表切片。

雖然文章中給的例子都很簡單,但我還是希望有心學好 Python 的初學者能親手敲一下這些代碼。

如果你在學習過程中有任何疑問,可以關注文章下方↓↓↓的公衆號及時與我聯繫,我們相互討論,共同學習。

最後,祝你學有所成。
公衆號-猿天罡

歡迎大家點贊、關注、收藏,我是Kelvin,我們下期再見,bye
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章