選單

零基礎Python完全自學教程15:Python中的列表

歡迎你來到站長學堂,學習站長線上出品的線上課程《零基礎 Python完全自學教程》今天給大家分享的是第14課《 Python中的列表 》。本節課是一個大課,我分了這些知識點進行詳細講解:列表的建立和刪除、訪問列表元素、遍歷列表、新增列表元素、修改列表元素、刪除列表元素、對列表進行統計和計算、對列表進行排序、列表推導式、二維列表的建立訪問應用。

零基礎Python完全自學教程15:Python中的列表

聽歌有歌曲列表,網站裡面的分類目錄頁裡面有文章列表,所以列表對於大家來說並不陌生。

在Python中,列表是由一系列的特定順序排列的元素。它是Python中內建的可變序列。

在形式上,列表的所有元素都放在一對中括號“[]”裡面,兩個相鄰的元素之間,使用英文逗號“,”隔開。

在內容上,列表可以將整數、實數、字串、列表、元組、字典、集合等任何型別的元素放入列表中,並且同一列表中,元素的型別可以不同。

下面本節課對列表相關的知識點進行整理、說明:

15。1、Python中列表的建立和刪除

在Python中建立列表的方法主要有以下幾種:

15。1。1、在Python中使用賦值運算子“=”建立列表:

在Python中,建立列表可以使用賦值運算子“=”建立列表,右邊是賦值,左邊是變數。具體語法如下:

listname = [element 1 , element 2 , element 3 , 。。。 , element n]

其中,listname 表示列表的名稱,可以是任何符合Python命名規則的識別符號;element 1 , element 2 ,表示列表中的元素,這些元素的數量沒有限制,內容上只要是Python中支援的資料型別如整數、實數、字串、列表、元組都可以。

如下面的都是合法的列表:

shuzi = [1,2,3,4,5,6,7] #數字

shige = [“床前明月光”,“疑是地上霜”,“舉頭望明月”,“低頭思故鄉”] #詩歌

hunhe = [66,“Python”,‘人生苦短,我用Python’,[“WEB開發”,“雲計算”,“爬蟲”]] #混合字串

python = [‘優雅’,“明確”,‘’‘簡單’‘’]

在實際使用的時候,我們通常是隻是放相同的型別的資料放在一個列表裡面,如上面的shizi,shige,python都是相同的資料型別,而hunhe的字串是混合的,可讀性差,估計連自己都不知道什麼意思。

15。1。2、在Python中建立空的列表[]

在Python中,是可以建立空的列表的,如建立一個空列表程式碼如下

kong = []

15。1。3、在Python中使用list() 函式建立數值列表

在Python中,可以使用list() 函式直接將range()函式迴圈出來的結果轉換為列表。

我們先回顧一下range()函式的使用方法:(在《Python中的迴圈語句》裡面學過)

range(start,end,step)

各引數說明如下:

start:用於指定技術的起始值,可以省略。如果省略則從0開始。

end:用於指定計數的結束值,不能省略。結束值不包括該值,如range(100),則表示值為0~99。當range()函式只有一個引數時,即表示指定計數的結束值。

step:用於指定步長,即兩個數之間的間隔,可以省略。如果省略則表示步長為1。如range(1,7)則表示值為1、2、3、4、5、6

list() 函式用法如下:

list(data)

其中,data表示可以轉換為列表的資料,包括range物件、字串、元組、或者其他可以迭代型別的資料。

如:建立一個0~20(不包括20)的所有偶數列表,可以使用以下程式碼:

list(range(0,20,2))

執行結果如下:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] >>>

注:使用list() 函式不僅可以透過range物件建立列表,還可以透過其他的函式物件建立列表。其他函式在後面慢慢會學到的。

15。1。4、在Python中刪除列表

在Python中,刪除已經建立的列表是很簡單的,使用 del 命令即可,語法格式如下:

del 列表名稱

如:刪除一個叫做 shige 的列表:

shige = [“床前明月光”,“疑是地上霜”,“舉頭望明月”,“低頭思故鄉”] del shige

但是,如果你刪除的是一個不存在的列表,就會報錯,如:

shige = [“床前明月光”,“疑是地上霜”,“舉頭望明月”,“低頭思故鄉”] del sg

當然上面不管是定義了shige 還是沒有定義shige 的列表,都是一樣,刪除sg列表都是不存在的,報錯結果如下:

Traceback (most recent call last): File “D:\Python\Python310\Doc\000。py”, line 1, in del sg NameError: name ‘sg’ is not defined >>>

實際開發中並不經常使用 del 來刪除列表,因為 Python 自帶的垃圾回收機制會自動銷燬無用的列表,即使開發者不手動刪除,Python 也會自動將其回收。

15。2、在Python中訪問列表元素

在Python中,如果將列表中的內容輸出是比較簡單的,使用print()函式即可。

如:我們輸出上個知識點的內容中的混合的hunhe列表,只要使用函式print(hunhe)即可

shuzi = [1,2,3,4,5,6,7] #數字 shige = [“床前明月光”,“疑是地上霜”,“舉頭望明月”,“低頭思故鄉”] #詩歌 hunhe = [66,“Python”,‘人生苦短,我用Python’,[“WEB開發”,“雲計算”,“爬蟲”]] #混合字串 python = [‘優雅’,“明確”,‘’‘簡單’‘’] print(hunhe)

執行結果如下:

[66, ‘Python’, ‘人生苦短,我用Python’, [‘WEB開發’, ‘雲計算’, ‘爬蟲’]] >>>

輸出python如下:

[‘優雅’, ‘明確’, ‘簡單’] >>>

經過對比,不是 輸入的是 單引號、雙引號、三引號 ,輸出的都是 單引號。

透過上述的輸出,我們發現,在輸出列表時,包括了兩側的中括號[]的。

列表是一個有序的集合,所以要訪問列表中的任何元素,您只需要告訴Python元素的位置(索引)。要訪問列表元素,首先指出列表的名稱,然後指出元素在列表中的位置。

下面,我們來輸出混合列表中的第3個元素,程式碼如下:

hunhe = [66,“Python”,‘人生苦短,我用Python’,[“WEB開發”,“雲計算”,“爬蟲”]]

print(hunhe[2])

輸出的結果為:

人生苦短,我用Python >>>

上面結果可以看出:在輸出的單個列表時,不包括中括號[]。如果是字串,還不包括左右的引號。

例項:我們來輸出每日一語。

import datetime #匯入日期時間類 mot = [“信任是最稀缺的貨幣。”, #定義一個列表 “追求快速,反而死的很慘;有時候,慢也就是快!”, “改編是一門技術,學會改編技術,就會改字成金,這輩子不會缺錢。”, “流量是天然存在的,客戶是天然存在的,方法是天然存在的。”, “你的每一個時間都很珍貴,都要放在最有生產力的事情上。”, “萬物皆不為我所有,萬物皆為我所用。”, “鑽石就在你家後院,秘笈就在你的眼前,你卻每天視而不見。”] day=datetime。datetime。now()。weekday() #獲取當前星期 print(mot[day]) #輸出每日一語

說明:在上述程式碼中,datetime。datetime。now()用於獲取當前日期,weekday()再則是從日期時間物件中獲取星期,其值為0~6中的一個,0位星期一,6為星期日。

在2021年10月31日的執行結果為:

鑽石就在你家後院,秘笈就在你的眼前,你卻每天視而不見。 >>>

本知識點中是透過索引(index)的方式訪問列表元素的,大家可以透過切片的方式,訪問列表元素哦。

15。3、在Python中遍歷列表

我們先解釋一下遍歷的意思,遍就是全面,到處的意思,歷就是行、遊歷的意思。所謂遍歷就是全部走遍,到處周遊的意思。

遍歷列表就是從頭到尾依次從列表中獲取資料。

遍歷列表中的所有元素是常用的操作,在遍歷的過程中可以完成查詢、處理等功能。

在Python中,遍歷列表的方法有很多種,下面介紹一些常用的遍歷方法:

15。3。1、直接使用for迴圈遍歷列表

直接使用for迴圈遍歷列表,只能輸出元素的值,語法格式如下:

for 變數元素 in 列表:

#輸出變數元素

列如,定義python的設計理念,然後透過for迴圈遍歷該列表,並輸出每條內容。程式碼如下:

print(“Python設計理念”)

python = [“優雅”,“明確”,“簡單”]

for linian in python:

print(linian)

執行以後結果如下:

Python設計理念 優雅 明確 簡單 >>>

15。3。2、使用for迴圈和enumerate()函式遍歷列表

使用for迴圈和enumerate()函式可以實現同時輸出索引值和元素內容,其語法格式如下:

for index,變數元素 in enumerate(列表)

#輸出index和變數元素

例如,定義python的設計理念,然後透過for迴圈和enumerate()函式遍歷該列表,並輸出索引和每條內容。程式碼如下:

print(“Python設計理念”) python = [“優雅”,“明確”,“簡單”] for index,linian in enumerate(python): print(index,linian)

執行結果如下:

Python設計理念 0 優雅 1 明確 2 簡單 >>>

15。3。3、使用for迴圈和list()函式遍歷列表

例如,定義python的設計理念,然後透過for迴圈和list()函式遍歷該列表,並輸出每條內容。程式碼如下:

print(“Python設計理念”)

python = [“優雅”,“明確”,“簡單”]

for linian in list(python):

print(linian)

執行結果如下:

Python設計理念 優雅 明確 簡單 >>>

15。3。4、使用for迴圈和range()函式遍歷列表

定義,列表number 的列表,然後透過for迴圈和range()函式遍歷該列表,並輸出每條內容。程式碼如下:

number = [1122,2366,4400,5577,8888] for i in range(len(number)): print(i,number[i])

執行結果為:

0 1122 1 2366 2 4400 3 5577 4 8888 >>>

可以不帶索引輸出,程式碼為:

number = [1122,2366,4400,5577,8888] for i in range(len(number)): print(number[i])

執行結果為:

1122 2366 4400 5577 8888 >>>

我們把輸出的結果,放在同一行,程式碼為:

number = [1122,2366,4400,5577,8888] for i in range(len(number)): print(number[i],end=“ ”)

執行結果為:

1122 2366 4400 5577 8888 >>>

注意 range()函式只能用於數字的列表,在非數字中就會報錯了。

15。3。5、使用for迴圈和iter()函式遍歷列表

列如,定義python的設計理念,然後使用for迴圈和iter()函式遍歷該列表,並輸出每條內容。程式碼如下:

print(“Python設計理念”) python = [“優雅”,“明確”,“簡單”] for linian in iter(python): print(linian)

輸出結果如下:

Python設計理念 優雅 明確 簡單 >>>

15。3。6、使用while迴圈遍歷列表

定義,列表number 的列表,然後透過while迴圈遍歷列表並輸出每條內容。程式碼如下:

number = [1122,2366,4400,5577,8888]

i = 0

while i

print(number[i])

i = i + 1

執行結果如下:

1122

2366

4400

5577

8888

>>>

15。4、新增列表元素

15。4。1、在Python中使用append()方法新增列表元素

我們在《Python中的序列相加詳解》一節中說過:在Python中,序列相加支援兩種或者兩種以上的相同型別的序列相加。即兩個或者兩個以上的序列進行連線。但是不會去除重複的元素。操作方法:序列相加是使用“+”號運算子實現的。

其實不僅僅序列相加可以使用“+”號運算子實現,在Python中新增列表元素也可以使用“+”號運算子實現。但是,這種新增方法執行速度比Python內建函式append()函式新增列表物件要慢。通常情況下,我們在新增列表元素的時候,使用列表物件的append()方法來實現。列表物件的 append()方法用於在列表末尾新增元素,語法如下:

listname。append(obj)

其中,listname為要新增元素的列表名稱;obj為要新增到末尾的物件。

如,定義一個3個數的元素列表,然後使用append()方法向該列表的末尾新增一個元素,可以使用下面程式碼:

sousuo = [“baidu”,“sogou”,“bing”]

sousuo。append(“Google”)print(“更新後列表:”,sousuo)

執行程式碼以後結果為:

更新後列表: [‘baidu’, ‘sogou’, ‘bing’, ‘Google’] >>>

15。4。2、在Python中使用extend()方法新增列表元素

上面講的是使用append()方法在列表末新增列表元素,如果將一個列表的全部元素,新增到另一個列表中,則使用列表物件的extend()方法新增列表元素。extend()方法具體的語法如下:

listname。extend(seq)

其中,listname為原列表;seq為要新增的列表。語句執行以後,seq的內容將追加到listname的後面。

列如,建立兩個列表,然後使用append()方法將第一個列表新增到第二個列表中,具體程式碼如下:

s1 = [“床前明月光”,“疑是地上霜”,“舉頭望明月”,“低頭思故鄉”]

s2 = [“唐”,“李白”,“靜夜思”]

s2。extend(s1)

print(s2)

執行結果為:

[‘唐’, ‘李白’, ‘靜夜思’, ‘床前明月光’, ‘疑是地上霜’, ‘舉頭望明月’, ‘低頭思故鄉’] >>>

15。4。3、在Python中使用insert()方法新增列表元素

append() 和 extend() 方法只能在列表末尾插入元素,如果希望在列表中間某個位置插入元素,那麼可以使用 insert() 方法。

insert() 的語法格式如下:

listname。insert(index , obj)

其中,index 表示指定位置的索引值。insert() 會將 obj 插入到 listname 列表第 index 個元素的位置。

當插入列表或者元組時,insert() 也會將它們視為一個整體,作為一個元素插入到列表中,這一點和 append() 是一樣的。

列如,定義一個3個數的元素列表,然後使用insert() 方法向該列表的中間新增一個元素,可以使用下面程式碼:

sousuo = [“baidu”,“sogou”,“bing”] sousuo。insert(2,[“google”,“360”]) #在第3的位置插入列表,整個列表被當成一個元素 print(“更新後列表:”,sousuo)

執行結果為:

更新後列表: [‘baidu’, ‘sogou’, [‘google’, ‘360’], ‘bing’]

>>>

15。5、修改列表元素

在Python中修改列表元素有兩種情況,一個是修改單個元素,一個是修改一組元素。現在站長線上分別講解:

15。5。1、在Python中修改單個元素

修改單個元素非常簡單,直接對元素賦值即可。使用索引得到列表元素後,透過“=”賦值符就改變了元素的值。

請看下面的例子:

num = [88, 66, 33, 17, 99, 28, 18] num[2] = 56 #使用正數索引 num[-3] = -5 #使用負數索引print(num)

執行結果如下:

[88, 66, 56, 17, -5, 28, 18] >>>

15。5。2、在Python中修改一組元素

Python 支援透過切片語法給一組元素賦值。在進行這種操作時,如果不指定步長(step 引數),Python 就不要求新賦值的元素個數與原來的元素個數相同;這意味,該操作既可以為列表新增元素,也可以為列表刪除元素。

num = [88, 66, 33, 17, 99, 28, 18]

#修改第 3~6 個元素的值(不包括第6個元素)

num[3:6] = [56,17,-5]

print(num)

執行結果如下:

[88, 66, 33, 56, 17, -5, 18] >>>

如果對空切片(slice)賦值,就相當於插入一組新的元素:

num = [88, 66, 33, 17, 99, 28, 18] #在5個元素處插入新元素 num[4:4] = [56,17,-5] print(num)

執行結果:

[88, 66, 33, 17, 56, 17, -5, 99, 28, 18] >>>

使用切片語法賦值時,Python 不支援單個值,例如下面的寫法就是錯誤的:

num = [88, 66, 33, 17, 99, 28, 18]

#在5個元素處插入新元素

num[4:4] = 100

print(num)

報錯如下:

Traceback (most recent call last): File “D:\Python\Python310\Doc\000。py”, line 3, in num[4:4] = 100 TypeError: can only assign an iterable >>>

但是如果使用字串賦值,Python 會自動把字串轉換成序列,其中的每個字元都是一個元素,請看下面的程式碼:

s = list(“Hello Python”) s[6:12] = “XYZ” print(s)

執行結果如下:

[‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ’, ‘X’, ‘Y’, ‘Z’] >>>

使用切片語法時也可以指定步長(step 引數),但這個時候就要求所賦值的新元素的個數與原有元素的個數相同,例如:

num = [88, 66, 33, 17, 99, 28, 18]

#步長為2,為第1、3、5個元素賦值

num[1: 6: 2] = [55, -55, 59。5]

print(num)

執行結果為:

[88, 55, 33, -55, 99, 59。5, 18]

>>>

15。6、除列表元素

在 Python 列表中刪除元素主要分為以下 3 種場景(共4種方法):

a、根據目標元素所在位置的索引進行刪除,可以使用 del 關鍵字或者 pop() 方法。

b、根據元素本身的值進行刪除,可使用列表提供的 remove() 方法。

c、將列表中所有元素全部刪除,可使用列表提供的 clear() 方法。

下面針對這3種場景的4種方法進行一一講解:

15。6。1、del:根據索引值刪除元素

del 是 Python 中的關鍵字,專門用來執行刪除操作,它不僅可以刪除整個列表,還可以刪除列表中的某些元素。

我們已經在《Python中列表的建立和刪除詳解》中講解了如何刪除整個列表,所以本節只講解如何刪除列表元素。

del 可以刪除列表中的單個元素,其語法格式為:

del listname[index]

其中,listname 表示列表名稱,index 表示元素的索引值。

列如,定義一個儲存一個3個元素的列表,刪除其中的一個元素,程式碼為:

sousuo = [“baidu”,“sogou”,“bing”] del sousuo[0] #刪除第一個,正數索引 #del sousuo[1] #刪除第二個 #del sousuo[-1] #刪除最後一個,負數索引print(sousuo)

執行結果為:

[‘sogou’, ‘bing’] >>>

看見了吧,我上面寫程式碼的時候使用#程式碼 註釋了第三行和第四行的,要不然去掉註釋,執行下來,一個元素都不剩了,只是剩下[]了。

del 也可以刪除中間一段連續的元素,格式為:

del listname[start : end]

其中,start 表示起始索引,end 表示結束索引。del 會刪除從索引 start 到 end 之間的元素,不包括 end 位置的元素。

列如,定義一個儲存5個元素的列表,刪除其中的第2~4個,不包括第4個,程式碼如下:

jianzhan = [“Python”,“html”,“php”,“CSS”,“MySQL”]

del jianzhan[1:3]

print(jianzhan)

執行結果為:

[‘Python’, ‘CSS’, ‘MySQL’] >>>

當然,也可以定義一個儲存5個元素的列表,刪除其中的第2~4個,包括第4個,程式碼如下:

jianzhan = [“Python”,“html”,“php”,“CSS”,“MySQL”] del jianzhan[1:4] print(jianzhan)

執行結果如下:

[‘Python’, ‘MySQL’] >>>

15。6。2、pop():根據索引值刪除元素

15。6。2。1、描述:pop() 函式用於移除列表中的一個元素(預設最後一個元素),並且返回該元素的值。

15。6。2。2、語法:pop()方法語法如下:

list。pop(-1)

15。6。2。3、引數:可選引數,要移除列表元素的索引值,不能超過列表總長度,預設為 index=-1,刪除最後一個列表值。

15。6。2。4、返回值:該方法返回從列表中移除的元素物件。

15。6。2。5、例項:

sousuo = [“baidu”,“sogou”,“bing”] ss = sousuo。pop(1) #刪除列表中的第二個元素 print(“刪除的項為 :”, ss) print(“列表現在為 : ”, sousuo)

執行結果如下:

刪除的項為 : sogou 列表現在為 : [‘baidu’, ‘bing’] >>>

15。6。3、remove():根據元素值進行刪除

15。6。3。1、描述:remove() 函式用於移除列表中某個值的第一個匹配項。(而且必須保證該元素是存在的。)

15。6。3。2、語法:list。remove(obj)其中list為列表,obj為列表中要移除的物件。

15。6。3。3、返回值:該方法沒有返回值但是會移除列表中的某個值的第一個匹配項。

15。6。3。4、例項:remove() 方法使用示例操作:

num = [88, 66, 33, 17, 66, 28, 18] num。remove(66) #第一次刪除66 print(num) num。remove(66) #第二次刪除66 print(num) num。remove(99) #刪除99 print(num)

執行結果如下:

[88, 33, 17, 66, 28, 18] [88, 33, 17, 28, 18] Traceback (most recent call last): File “D:\Python\Python310\Doc\000。py”, line 6, in num。remove(99) #刪除99 ValueError: list。remove(x): x not in list >>>

最後一次刪除,因為 99 不存在導致ValueError異常,所以我們在使用 remove() 刪除元素時最好提前判斷一下元素是否存在,改進後的程式碼如下:

num = [88, 66, 33, 17, 66, 28, 18] num。remove(66) #第一次刪除66 print(num) num。remove(66) #第二次刪除66 print(num) if num。count(99)>0: #判斷要刪除的元素99是否存在 num。remove(99) #指定刪除99 print(num)

執行結果如下:

[88, 33, 17, 66, 28, 18] [88, 33, 17, 28, 18] [88, 33, 17, 28, 18] >>>

說明:列表物件的count()方法是用於判斷指定的元素出現的次數返回的結果為0時,不是不存在該元素。關於count()方法的詳細介紹,我們在下一個知識點《在Python中對列表進行統計計算詳解》中會有詳細說明。

15。6。4、clear():刪除列表所有元素

在Python clear() 用來刪除列表的所有元素,即清空列表,請看下面的程式碼:

s = [“床前明月光”,“疑是地上霜”,“舉頭望明月”,“低頭思故鄉”] s。clear() print(s)

執行結果為:

[]

>>>

15。7、在python中對列表進行統計和計算

15。7。1、在Python中使用count()方法獲取指定的元素的出現次數。

我們在前面學過透過len()函式計算列表的長度,但是他是不管也沒有重複的,而今天要講的,使用列表物件的count()方法可以獲取指定元素在列表中出現的次數。count()方法的數值型別語法格式如下:

listname。count(obj)

其中,listname代表列表的名稱;obj表示要被判斷出現次數的物件,這裡是指精確匹配,而不是是元素值的一部分。

例如,建立一個8個數值的數列列表,使用count()方法統計數值出現的次數。程式碼如下:

s = [66,88,13,59,66,39,100,59]

s1 = s。count(66)

s2 = s。count(88)

s3 = s。count(99)print(“66出現的次數:”,s1)

print(“88出現的次數:”,s2)

print(“99出現的次數:”,s3)

執行結果如下:

66出現的次數: 2 88出現的次數: 1 99出現的次數: 0 >>>

count()方法除了統計數值型列表,還是可以統計字串裡某個字串或子字串出現的次數,如果沒有就返回為0。可選引數為在字串搜尋的開始與結束位置。

語法如下:

str。count(sub,start,end)

此方法中,各引數的具體含義如下:

str:表示原字串;

sub:表示要檢索的字串;

start:指定檢索的起始位置,也就是從什麼位置開始檢測。如果不指定,預設從頭開始檢索;

end:指定檢索的終止位置,如果不指定,則表示一直檢索到結尾。

列如:檢索字串“olzz。com/xuetang/python”中,“/”的出現次數。

str = “olzz。com/xuetang/python”

num = str。count(‘/’)

print(“‘/’出現的次數:”,num)

執行結果為:

‘/’出現的次數: 2 >>>

下面我們指定字串的起址位置:

str = “olzz。com/xuetang/python” num = str。count(‘/’,1,10) #指定‘/’在第2個到第11個字元之間 print(“‘/’出現的次數:”,num)

執行結果為:

‘/’出現的次數: 1 >>>

15。7。2、在Python中使用index()方法獲取指定元素首次出現的位置

在Python列表物件的index()方法可以獲取指定元素在列表中首次出現的位置(索引),在數值型別的語法格式如下:

listname。index(obj)

引數說明:

listname:表示列表的名稱。

obj:表示要查詢的物件(精確匹配)。

返回值:首次出現的索引值。

s = [66,88,13,59,66,39,100,59] s1 = s。index(66) s2 = s。index(59) print(“66首次出現的索引位置:”,s1) print(“59首次出現的索引位置:”,s2)

執行結果如下:

66首次出現的位置: 0

59首次出現的位置: 3

>>>

如果索引的值,列表裡面,就會丟擲異常:

s = [66,88,13,59,66,39,100,59] s3 = s。index(77) print(“77首次出現的索引位置:”,s3)

執行結果為:

Traceback (most recent call last): File “D:\Python\Python310\Doc\000。py”, line 2, in s3 = s。index(77) ValueError: 77 is not in list >>>

和上方的count()方法一樣,index()方法可以用於數值型的檢索,也可以用於檢索是否包含指定的字串,不同之處在於,當指定的字串不存在時,index() 方法會丟擲異常。(count()方法出現次數為0,而不是異常)。

str。index(sub,start,end)

此方法中,各引數的具體含義如下:

str:表示原字串;

sub:表示要檢索的字串;

start:指定檢索的起始位置,也就是從什麼位置開始檢測。如果不指定,預設從頭開始檢索;

end:指定檢索的終止位置,如果不指定,則表示一直檢索到結尾。

列如:檢索字串“olzz。com/xuetang/python”中,“/”首次出現的位置。

str = “olzz。com/xuetang/python” num = str。index(‘/’) print(“‘/’首次出現的位置:”,num)

執行結果如下:

‘/’首次出現的位置: 8 >>>

下面我們指定字串的起址位置:

str = “olzz。com/xuetang/python” num = str。index(‘/’,1,10) #指定‘/’在第2個到第11個字元之間 print(“‘/’首次出現的位置:”,num)

執行結果:

‘/’首次出現的位置: 8 >>>

執行結果是一樣的,因為我指定的位置是一樣,現在我來指定到後面這個區域,使用負數索引:

str = “olzz。com/xuetang/python” num = str。index(‘/’,-10,-1) #指定‘/’在最後一個到最後10個字元之間 print(“‘/’首次出現的位置:”,num)

執行結果如下:

‘/’首次出現的位置: 16 >>>

這個結果是從左到右的,因為指定區域排除了第8個,所以滿足要求的是第16個了。

15。7。3、在Python中使用sum()函式統計數值列表的元素和

在講count()方法和index()方法的時候,我是把數值和字串,分開講解的,因為使用數值的方法比字串的方法要簡單。

但是在sum()函式中,只能統計數值了。語法格式如下:

sum(iterable[, start])

相關說明如下:

iterable:可迭代物件,如:列表、元組、集合。

start:指定相加的引數,如果沒有設定這個值,預設為0。

下面各種物件之間求和舉例:

>>> sum([0,1,2]) # 列表求和

3

>>> sum((0,1,2,3),1) # 元組計算總和後再加 1

7

>>> sum([0,1,2,3,4],2) # 列表計算總和後再加 2

12

>>>

例項:某中學校長隨機抽查了初三1班的10名男學生的數學成績,和10名女學生的數學成績,然後應用sum()函式計算男學生和女學生的成績之和。對應的程式碼如下:

s1 = [93,95,86,98,99,99,89,100,100,97] #10名男學生的數學成績列表

s2 = [98,96,86,88,96,100,93,87,95,95] #10名女學生的數學成績列表

z1 = sum(s1)

z2 = sum(s2)

print(“10名男學生的數學總分數為:”,z1)

print(“10名女學生的數學總分數為:”,z2)

執行結果為:

10名男學生的數學總分數為: 956

10名女學生的數學總分數為: 934

>>>

15。8、在python中對列表進行排序

在Python實際開發中,會經常需要用到對列表進行排序。下面站長線上對列表的排序講解幾種常用的方法:

15。8。1、使用列表物件的sort()方法進行排序。

列表物件提供了sort()方法用於對原列表中的元素進行排序。排序以後,原列表中的元素順序將發生改變。列表物件的sort()方法的語法格式如下:

listname。sort(key=None,reverse=False)

相關的引數說明如下:

listname:表示要進行排序的列表。

key:表示指定一個從每個列表元素中提取一個比較鍵。(列如,設定“key=str。lower”表示在排序時不區分字母的大小寫)。

reverse:可選引數,如果將其值指定為True,則表示降序排序;如果將其指定為False,則表示升序排列。預設為升序排列。

列如,某中學初三1班的10名男學生的數學成績,然後應用sort()方法對其進行排序,程式碼如下:

s = [93,95,86,98,99,99,89,100,100,97]print(“原列表:”,s)

s。sort()

print(“升序:”,s)

s。sort(reverse=True)

print(“降序:”,s)

執行結果如下:

原列表: [93, 95, 86, 98, 99, 99, 89, 100, 100, 97] 升序: [86, 89, 93, 95, 97, 98, 99, 99, 100, 100] 降序: [100, 100, 99, 99, 98, 97, 95, 93, 89, 86] >>>

使用sort()方法除了可以對數值進行排序,還可以多字串進行排序。對字串進行排序預設區分大小寫,如果想不區分大小寫,則需要指定其key引數。

列如,定義儲存一個大小寫不同的英文字串列表,然後應用sort()方法對其進行排序,程式碼如下:

s = [‘hello’,‘polly’,‘Lucy’,‘Lily’,‘Han Meimei’]

s。sort()

print(“區分字母大小寫:”,s)

s。sort(key=str。lower)

print(“不區分字母大小寫:”,s)

執行結果如下:

區分字母大小寫: [‘Han Meimei’, ‘Lily’, ‘Lucy’, ‘hello’, ‘polly’] 不區分字母大小寫: [‘Han Meimei’, ‘hello’, ‘Lily’, ‘Lucy’, ‘polly’] >>>

說明:sort()方法對列表排序時,最中文的支援不好,排序的結果與我們常用的按拼音排序或者筆畫排序都不一致。要想實現對中文內容的排序,需要重新編寫相應的方法,不能直接使用sort()方法。如:

s = [‘張三’,‘李四’,‘王五’,‘李明’,‘楊軍’] s。sort() print(s)

執行結果:

[‘張三’, ‘李四’, ‘李明’, ‘楊軍’, ‘王五’] >>>

這個結果,我們根本看不懂,所以不能直接使用sort()方法對中文列表排序。

15。8。2、使用內建的sorted()函式進行排序。

在Python中,提供了一個內建的sorted()函式,用於對列表進行排序。使用該函式進行排序後,原列表的元素順序不變。sorted()函式的語法格式如下:

sorted(iterable,key=None,reverse=False)

相關的引數說明如下:

iterable:表示要進行排序的列表。

key:表示指定從每個列表元素中提取一個比較鍵。(列如,設定“key=str。lower”表示在排序時不區分字母的大小寫)。

reverse:可選引數,如果將其值指定為True,則表示降序排序;如果將其指定為False,則表示升序排列。預設為升序排列。

列如,某中學初三1班的10名男學生的數學成績,然後應用sorted()函式對其進行排序,程式碼如下:

s = [93,95,86,98,99,99,89,100,100,97] s1 = sorted(s) print(“升序:”,s1) s2 = sorted(s,reverse=True) print(“降序:”,s2) print(“原列表:”,s)

執行結果如下:

升序: [86, 89, 93, 95, 97, 98, 99, 99, 100, 100] 降序: [100, 100, 99, 99, 98, 97, 95, 93, 89, 86] 原列表: [93, 95, 86, 98, 99, 99, 89, 100, 100, 97] >>>

說明:

列表物件的sort()方法和sorted()函式的作用基本相同。不同的地方有以下兩點:

a、sort()方法只能處理列表型別資料的排序;sorted()函式則可以處理多種型別資料的排序。

b、sort()方法會修改原來的列表的元素的排序;sorted()函式不會修改原來的資料,會建立一個原列表的副本,只是返回一個排序後的列表。

15。8。3、使用reverse()方法進行反向排序。

我們在使用sort()方法和sorted()函式的時候,在處理升序和降序的時候用到了reverse。

reverse是反轉,相反,背面,反面的意思。其實還有一種特殊的排序就是反向排序。相關程式碼如下:

s = [93,95,86,98,99,99,89,100,100,97] python = [“優雅”,“明確”,“簡單”] s。reverse() python。reverse() print(s) print(python)

執行結果如下:

[97, 100, 100, 89, 99, 99, 98, 86, 95, 93] [‘簡單’, ‘明確’, ‘優雅’] >>>

在實際的Python開發中,使用reverse()方法進行反向排序,很多的教程中,沒有提及了。因為使用的比較少。

15。9、在python中的列表推導式

含義:列表推導式(list comprehension)也稱為列表解析式,就是可以快速生成一個列表,或者根據某個列表生成滿足指定需求的列表。

列表推導式,通常有以下幾種型別的語法格式:

15。9。1、生成指定範圍的數值列表,語法格式如下:

list = [Expression for var in range]

詳細引數說明:

list:表示生成的列表名稱

Expression:表示式,用於計算新列表的元素

var:迴圈變數

range:採用range()函式生成的range物件

例如,生成一個10以內的序列,和10以內的偶數序列

a1 = [i for i in range(10)] #生成一個10以內的序列

a2 = [i for i in range(10) if i % 2 == 0] #生成一個10以內的偶數序列print(a1)

print(a2)

執行結果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 2, 4, 6, 8] >>>

再來看一個例子:10以內的平方數,程式碼如下:

s = [i**2 for i in range(10)]

print(s)

執行結果如下:

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

上面的比較簡單,下面我們再來一個,生成10以內的5個隨機數列表,程式碼如下:

import random #匯入random標準庫 s = [random。randint(0,10) for i in range(5)] print(“生成的5個隨機數為:”,s)

執行以後結果為:

生成的5個隨機數為: [6, 4, 7, 5, 0] #多次執行,結果都不一樣,隨機生成 >>>

15。9。2、根據列表生成指定需求的列表,語法如下:

newlist = [Expression for var in list]

詳細引數說明如下:

newlist:表示新生成的列表名稱

Expression:表示式,用於計算新列表的元素

var:變數,值為後面列表的每個元素值

list:用於生成新列表的原列表

列如,定義一個序列商品的進貨價,然後應用列表推導式生成一個全部翻倍的零售價,程式碼如下:

jinhuo = [5,2,8,6,6,10,15,5]

lingshou = [int(i*2) for i in jinhuo]

print(“進貨價:”,jinhuo)

print(“零售價:”,lingshou)

執行結果如下:

進貨價: [5, 2, 8, 6, 6, 10, 15, 5] 零售價: [10, 4, 16, 12, 12, 20, 30, 10] >>>

15。9。3、從列表中選擇符合條件的元素組成新的列表,語法格式如下:

newlist = [Expression for var in list if condition]

詳細引數說明如下:

newlist:表示新生成的列表名稱

Expression:表示式,用於計算新列表的元素

var:變數,值為後面列表的每個元素值

list:用於生成新列表的原列表

condition:條件表示式,用於指定篩選條件

列如,定義一個序列商品的進貨價,然後應用列表推導式生成一個進貨價小於10的列表,程式碼如下:

jinhuo = [5,2,8,6,6,10,15,5] s = [i for i in jinhuo if i

執行結果如下:

進貨價: [5, 2, 8, 6, 6, 10, 15, 5]

進貨價小於10的: [5, 2, 8, 6, 6, 5]

>>>

15。10、python中二維列表的建立、訪問、應用

二維列表的概念:

二維列表是將其他列表當做列表的元素放在一個列表當中,也就是列表的巢狀。

站長線上溫馨提示:二維列表是多維列表的基礎,未來還會出現三維列表,四維列表等多維列表。

在Python中,建立二維列表有以下3種常用的方法:

15。10。1、直接定義二維列表。

在Python中,二維列表就是包含列表的列表。即一個列表的每個元素又都是一個列表。

在建立二維列表時,我們可以直接使用列表的語法格式,進行定義:

listname = [[元素11,元素12,元素13,……,元素1n],

[元素21,元素22,元素23,……,元素2n],

……,

[元素n1,元素n2,元素n3,……,元素nn]]

其中的相關引數說明如下:

listname:表示要生成的列表名稱。

[元素11,元素12,元素13,……,元素1n]:表示二維列表的第1行(也是一個列表)。其中元素11代表第1行第1列,元素12代表第1行第2列,以此類推,直到元素1n代表第1行第n列。

[元素21,元素22,元素23,……,元素2n]:表示二維列表的第2行(也是一個列表)。其中元素21代表第2行第1列,元素22代表第2行第2列,以此類推,直到元素2n代表第2行第n列。

[元素n1,元素n2,元素n3,……,元素nn]:表示二維列表的第n行(也是一個列表)。其中元素n1代表第n行第一列,元素n2代表第n行第2列,以此類推,直到元素nn代表第n行第n列。

例如,定義一個某中學9年級1班3位同學的語數英的成績列表,程式碼如下:

cj = [[‘名字’,‘語文’,‘數學’,‘英語’], [‘張三’,88,98,95], [‘李四’,85,99,91], [‘王五’,86,88,89]] print(cj)

執行上面程式碼,建立的二維列表如下:

[[‘名字’, ‘語文’, ‘數學’, ‘英語’], [‘張三’, 88, 98, 95], [‘李四’, 85, 99, 91], [‘王五’, 86, 88, 89]] >>>

15。10。2、使用巢狀的for迴圈建立二維列表。

在Python中,建立二維列表,可以使用巢狀的for迴圈來實現,如建立一個5行5列的二維列表,可以使用下面程式碼:

s = [] # 建立一個空列表

for i in range(5): # 建立一個5行的列表(行)

s。append([]) # 在空的列表中新增空的列表

for j in range(5): # 迴圈每一行的每一個元素(列)

s[i]。append(j) # 為內層列表新增元素

print(s) # 輸出列表

執行上面的程式碼,建立的二維列表如下:

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] >>>

15。10。3、使用列表推導式建立二維列表。

我們剛剛在上一個知識點《在python中的列表推導式詳解》學習過列表推導式。列表推導式就是可以快速生成一個列表,或者根據某個列表生成滿足指定需求的列表。

在這裡我們也可以使用列表推導式來建立二維列表,並且是被推薦的方法,而且語法簡單。

比如使用列表推導式的方法建立一個5行5列的二維列表,程式碼如下:

s = [[j for j in range(5)] for i in range(5)]

print(s)

執行上面程式碼,建立的二維列表結果如下:

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] >>>

15。10。4、二維列表的訪問

我們在建立好二維列表以後,可以透過下列語法,對列表元素的訪問:

listname[索引1][索引2]

其中,相關的引數說明為:

listname:表示列表的名稱

索引1:列表中的行。索引值從0開始,即第一行是索引為0。(索引也稱為下標,索引1也稱為下標1)

索引2:列表中的列。索引值從0開始,即第一列是索引為0。(索引也稱為下標,索引2也稱為下標2)

如,定義一個二維列表,訪問他的第1行,第5列,可以使用下面程式碼:listname[0,4]

s = [[j for j in range(5)] for i in range(5)] # 定義一個5行5列的二維列表 print(“5行5列的列表為:”,s) # 輸出二維列表 print(“其中第1行,第5列為:”,s[0][4]) # 輸出第1行,第5列的元素

執行結果為:

5行5列的列表為: [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 其中第1行,第5列為: 4 >>>

15。10。5、二維列表的應用

使用二維列表輸出不同版式的古詩《靜夜思》

—— 橫版 ——

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉

—— 豎版 ——

低舉疑床

頭頭是前

思望地明

故明上月

鄉月霜光

站長線上溫馨提醒:橫版是從左往右讀,豎版是從右往左讀的。

我們在IDLE中新建一個檔案,在該檔案中,定義4個字串為《靜夜思》的詩句,再定義一個二維列表,使用巢狀的for迴圈,將古詩以橫版輸出,再將二維列表進行逆序排列,最後使用巢狀的for迴圈,將古詩以豎版輸出,程式碼如下:

str1 = ‘床前明月光’ str2 = ‘疑是地上霜’ str3 = ‘舉頭望明月’ str4 = ‘低頭思故鄉’ verse = [list(str1), list(str2), list(str3), list(str4)] # 定義一個二維列表 print(‘\n—— 橫版 ——\n’) for i in range(4): # 迴圈古詩的每一行 for j in range(5): # 迴圈每一行的每個字(列) if j == 4: # 如果是一行中的最後一個字 print(verse[i][j]) # 換行輸出 else: print(verse[i][j], end=‘’) # 不換行輸出 verse。reverse() # 對列表進行逆序排列 print(‘\n—— 豎版 ——\n’) for i in range(5): # 迴圈每一行的每個字(列) for j in range(4): # 迴圈新逆序排列後的第一行 if j == 3: # 如果是最後一行 print(verse[j][i]) # 換行輸出 else: print(verse[j][i], end=‘’) # 不換行輸出

執行結果如下:

—— 橫版 —— 床前明月光 疑是地上霜 舉頭望明月 低頭思故鄉 —— 豎版 —— 低舉疑床 頭頭是前 思望地明 故明上月 鄉月霜光 >>>

原理解析:

15。10。5。1、先將古詩的每一行的字串,使用list()函式轉換成列表。列表程式碼如下:

[[‘床’,‘前’,‘明’,‘月’,‘光’],

[‘疑’,‘是’,‘地’,‘上’,‘霜’],

[‘舉’,‘頭’,‘望’,‘明’,‘月’],

[‘低’,‘頭’,‘思’,‘故’,‘鄉’]]

15。10。5。2、列表物件的reverse()方法用於對列表進行逆向排序,將列表的最後一個移到第一個,倒數第二個移到第二個,以此類推。程式碼如下:

[[‘低’, ‘頭’, ‘思’, ‘故’, ‘鄉’], [‘舉’, ‘頭’, ‘望’, ‘明’, ‘月’], [‘疑’, ‘是’, ‘地’, ‘上’, ‘霜’], [‘床’, ‘前’, ‘明’, ‘月’, ‘光’]]

15。10。5。3、橫版是按行列印,豎版卻是按列列印,按列列印如下:

低舉疑床 頭頭是前 思望地明 故名上月 鄉月霜光

看見了吧,我們把讀不通順的,按列列印的“低舉疑床,頭頭是前,思望地明,故名上月,鄉月霜光”就正是我們要的按豎排列印的詩。豎排的寫法是從右往左寫的。讀也從右邊讀起,就正是我們的想要的詩了。

以上10點實際上是分了10個文章才能講解完畢,如果僅僅一節課來講,寫教程都要寫三五天,而且學的時候,一天都不一定學得完,估計也得分三五天才能學完。

下節預告:零基礎Python完全自學教程16:Python中的元組

相關閱讀:

《零基礎Python完全自學教程》目錄彙總

站長百科詞條:Python