零基礎(chǔ)Python完全自學教程15:Python中的列表
歡迎你來到站長學堂,學習站長在線出品的在線課程《零基礎(chǔ) Python完全自學教程》今天給大家分享的是第15課《 Python中的列表 》。本節(jié)課是一個大課,我分了這些知識點進行詳細講解:列表的創(chuàng)建和刪除、訪問列表元素、遍歷列表、添加列表元素、修改列表元素、刪除列表元素、對列表進行統(tǒng)計和計算、對列表進行排序、列表推導式、二維列表的創(chuàng)建訪問應用。
永久美國免備案虛擬主機1元1天,15元1月,100元1年,1000元永久
站長在線旗下答案網(wǎng)站,全站所有題目,免費查看答案和答案解析
歡迎你來到站長學堂,學習站長在線出品的在線課程《零基礎(chǔ) Python完全自學教程》今天給大家分享的是第15課《 python中的列表 》。本節(jié)課是一個大課,我分了這些知識點進行詳細講解:列表的創(chuàng)建和刪除、訪問列表元素、遍歷列表、添加列表元素、修改列表元素、刪除列表元素、對列表進行統(tǒng)計和計算、對列表進行排序、列表推導式、二維列表的創(chuàng)建訪問應用。
聽歌有歌曲列表,網(wǎng)站里面的分類目錄頁里面有文章列表,所以列表對于大家來說并不陌生。
在Python中,列表是由一系列的特定順序排列的元素。它是Python中內(nèi)置的可變序列。
在形式上,列表的所有元素都放在一對中括號“[]”里面,兩個相鄰的元素之間,使用英文逗號“,”隔開。
在內(nèi)容上,列表可以將整數(shù)、實數(shù)、字符串、列表、元組、字典、集合等任何類型的元素放入列表中,并且同一列表中,元素的類型可以不同。
下面本節(jié)課對列表相關(guān)的知識點進行整理、說明:
15.1、Python中列表的創(chuàng)建和刪除
在Python中創(chuàng)建列表的方法主要有以下幾種:
15.1.1、在Python中使用賦值運算符“=”創(chuàng)建列表:
在Python中,創(chuàng)建列表可以使用賦值運算符“=”創(chuàng)建列表,右邊是賦值,左邊是變量。具體語法如下:
listname = [element 1 , element 2 , element 3 , ... , element n]
其中,listname 表示列表的名稱,可以是任何符合Python命名規(guī)則的標識符;element 1 , element 2 ,表示列表中的元素,這些元素的數(shù)量沒有限制,內(nèi)容上只要是Python中支持的數(shù)據(jù)類型如整數(shù)、實數(shù)、字符串、列表、元組都可以。
如下面的都是合法的列表:
shuzi = [1,2,3,4,5,6,7] #數(shù)字
shige = ["床前明月光","疑是地上霜","舉頭望明月","低頭思故鄉(xiāng)"] #詩歌
hunhe = [66,"Python",'人生苦短,我用Python',["web開發(fā)","云計算","爬蟲"]] #混合字符串
python = ['優(yōu)雅',"明確",'''簡單''']
在實際使用的時候,我們通常是只是放相同的類型的數(shù)據(jù)放在一個列表里面,如上面的shizi,shige,python都是相同的數(shù)據(jù)類型,而hunhe的字符串是混合的,可讀性差,估計連自己都不知道什么意思。
15.1.2、在Python中創(chuàng)建空的列表[]
在Python中,是可以創(chuàng)建空的列表的,如創(chuàng)建一個空列表代碼如下
kong = []
15.1.3、在Python中使用list() 函數(shù)創(chuàng)建數(shù)值列表
在Python中,可以使用list() 函數(shù)直接將range()函數(shù)循環(huán)出來的結(jié)果轉(zhuǎn)換為列表。
我們先回顧一下range()函數(shù)的使用方法:(在《Python中的循環(huán)語句》里面學過)
range(start,end,step)
各參數(shù)說明如下:
start:用于指定技術(shù)的起始值,可以省略。如果省略則從0開始。
end:用于指定計數(shù)的結(jié)束值,不能省略。結(jié)束值不包括該值,如range(100),則表示值為0~99。當range()函數(shù)只有一個參數(shù)時,即表示指定計數(shù)的結(jié)束值。
step:用于指定步長,即兩個數(shù)之間的間隔,可以省略。如果省略則表示步長為1。如range(1,7)則表示值為1、2、3、4、5、6
list() 函數(shù)用法如下:
list(data)
其中,data表示可以轉(zhuǎn)換為列表的數(shù)據(jù),包括range對象、字符串、元組、或者其他可以迭代類型的數(shù)據(jù)。
如:創(chuàng)建一個0~20(不包括20)的所有偶數(shù)列表,可以使用以下代碼:
list(range(0,20,2))
運行結(jié)果如下:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>>
注:使用list() 函數(shù)不僅可以通過range對象創(chuàng)建列表,還可以通過其他的函數(shù)對象創(chuàng)建列表。其他函數(shù)在后面慢慢會學到的。
15.1.4、在Python中刪除列表
在Python中,刪除已經(jīng)創(chuàng)建的列表是很簡單的,使用 del 命令即可,語法格式如下:
del 列表名稱
如:刪除一個叫做 shige 的列表:
shige = ["床前明月光","疑是地上霜","舉頭望明月","低頭思故鄉(xiāng)"]
del shige
但是,如果你刪除的是一個不存在的列表,就會報錯,如:
shige = ["床前明月光","疑是地上霜","舉頭望明月","低頭思故鄉(xiāng)"]
del sg
當然上面不管是定義了shige 還是沒有定義shige 的列表,都是一樣,刪除sg列表都是不存在的,報錯結(jié)果如下:
Traceback (most recent call last):
File "D:\Python\Python310\Doc\000.py", line 1, in <module>
del sg
NameError: name 'sg' is not defined
>>>
實際開發(fā)中并不經(jīng)常使用 del 來刪除列表,因為 Python 自帶的垃圾回收機制會自動銷毀無用的列表,即使開發(fā)者不手動刪除,Python 也會自動將其回收。
15.2、在Python中訪問列表元素
在Python中,如果將列表中的內(nèi)容輸出是比較簡單的,使用print()函數(shù)即可。
如:我們輸出上個知識點的內(nèi)容中的混合的hunhe列表,只要使用函數(shù)print(hunhe)即可
shuzi = [1,2,3,4,5,6,7] #數(shù)字
shige = ["床前明月光","疑是地上霜","舉頭望明月","低頭思故鄉(xiāng)"] #詩歌
hunhe = [66,"Python",'人生苦短,我用Python',["WEB開發(fā)","云計算","爬蟲"]] #混合字符串
python = ['優(yōu)雅',"明確",'''簡單''']
print(hunhe)
執(zhí)行結(jié)果如下:
[66, 'Python', '人生苦短,我用Python', ['WEB開發(fā)', '云計算', '爬蟲']]
>>>
輸出python如下:
['優(yōu)雅', '明確', '簡單']
>>>
經(jīng)過對比,不是 輸入的是 單引號、雙引號、三引號 ,輸出的都是 單引號。
通過上述的輸出,我們發(fā)現(xiàn),在輸出列表時,包括了兩側(cè)的中括號[]的。
列表是一個有序的集合,所以要訪問列表中的任何元素,您只需要告訴Python元素的位置(索引)。要訪問列表元素,首先指出列表的名稱,然后指出元素在列表中的位置。
下面,我們來輸出混合列表中的第3個元素,代碼如下:
hunhe = [66,"Python",'人生苦短,我用Python',["WEB開發(fā)","云計算","爬蟲"]]
print(hunhe[2])
輸出的結(jié)果為:
人生苦短,我用Python
>>>
上面結(jié)果可以看出:在輸出的單個列表時,不包括中括號[]。如果是字符串,還不包括左右的引號。
實例:我們來輸出每日一語。
import datetime #導入日期時間類
mot = ["信任是最稀缺的貨幣。", #定義一個列表
"追求快速,反而死的很慘;有時候,慢也就是快!",
"改編是一門技術(shù),學會改編技術(shù),就會改字成金,這輩子不會缺錢。",
"流量是天然存在的,客戶是天然存在的,方法是天然存在的。",
"你的每一個時間都很珍貴,都要放在最有生產(chǎn)力的事情上。",
"萬物皆不為我所有,萬物皆為我所用。",
"鉆石就在你家后院,秘笈就在你的眼前,你卻每天視而不見。"]
day=datetime.datetime.now().weekday() #獲取當前星期
print(mot[day]) #輸出每日一語
說明:在上述代碼中,datetime.datetime.now()用于獲取當前日期,weekday()再則是從日期時間對象中獲取星期,其值為0~6中的一個,0位星期一,6為星期日。
在2021年10月31日的運行結(jié)果為:
鉆石就在你家后院,秘笈就在你的眼前,你卻每天視而不見。
>>>
本知識點中是通過索引(index)的方式訪問列表元素的,大家可以通過切片的方式,訪問列表元素哦。
15.3、在Python中遍歷列表
我們先解釋一下遍歷的意思,遍就是全面,到處的意思,歷就是行、游歷的意思。所謂遍歷就是全部走遍,到處周游的意思。
遍歷列表就是從頭到尾依次從列表中獲取數(shù)據(jù)。
遍歷列表中的所有元素是常用的操作,在遍歷的過程中可以完成查詢、處理等功能。
在Python中,遍歷列表的方法有很多種,下面介紹一些常用的遍歷方法:
15.3.1、直接使用for循環(huán)遍歷列表
直接使用for循環(huán)遍歷列表,只能輸出元素的值,語法格式如下:
for 變量元素 in 列表:
#輸出變量元素
列如,定義python的設計理念,然后通過for循環(huán)遍歷該列表,并輸出每條內(nèi)容。代碼如下:
print("Python設計理念")
python = ["優(yōu)雅","明確","簡單"]
for linian in python:
print(linian)
執(zhí)行以后結(jié)果如下:
Python設計理念
優(yōu)雅
明確
簡單
>>>
15.3.2、使用for循環(huán)和enumerate()函數(shù)遍歷列表
使用for循環(huán)和enumerate()函數(shù)可以實現(xiàn)同時輸出索引值和元素內(nèi)容,其語法格式如下:
for index,變量元素 in enumerate(列表)
#輸出index和變量元素
例如,定義python的設計理念,然后通過for循環(huán)和enumerate()函數(shù)遍歷該列表,并輸出索引和每條內(nèi)容。代碼如下:
print("Python設計理念")
python = ["優(yōu)雅","明確","簡單"]
for index,linian in enumerate(python):
print(index,linian)
執(zhí)行結(jié)果如下:
Python設計理念
0 優(yōu)雅
1 明確
2 簡單
>>>
15.3.3、使用for循環(huán)和list()函數(shù)遍歷列表
例如,定義python的設計理念,然后通過for循環(huán)和list()函數(shù)遍歷該列表,并輸出每條內(nèi)容。代碼如下:
print("Python設計理念")
python = ["優(yōu)雅","明確","簡單"]
for linian in list(python):
print(linian)
執(zhí)行結(jié)果如下:
Python設計理念
優(yōu)雅
明確
簡單
>>>
15.3.4、使用for循環(huán)和range()函數(shù)遍歷列表
定義,列表number 的列表,然后通過for循環(huán)和range()函數(shù)遍歷該列表,并輸出每條內(nèi)容。代碼如下:
number = [1122,2366,4400,5577,8888]
for i in range(len(number)):
print(i,number[i])
執(zhí)行結(jié)果為:
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])
運行結(jié)果為:
1122
2366
4400
5577
8888
>>>
我們把輸出的結(jié)果,放在同一行,代碼為:
number = [1122,2366,4400,5577,8888]
for i in range(len(number)):
print(number[i],end=" ")
執(zhí)行結(jié)果為:
1122 2366 4400 5577 8888
>>>
注意 range()函數(shù)只能用于數(shù)字的列表,在非數(shù)字中就會報錯了。
15.3.5、使用for循環(huán)和iter()函數(shù)遍歷列表
列如,定義python的設計理念,然后使用for循環(huán)和iter()函數(shù)遍歷該列表,并輸出每條內(nèi)容。代碼如下:
print("Python設計理念")
python = ["優(yōu)雅","明確","簡單"]
for linian in iter(python):
print(linian)
輸出結(jié)果如下:
Python設計理念
優(yōu)雅
明確
簡單
>>>
15.3.6、使用while循環(huán)遍歷列表
定義,列表number 的列表,然后通過while循環(huán)遍歷列表并輸出每條內(nèi)容。代碼如下:
number = [1122,2366,4400,5577,8888]
i = 0
while i < len(number):
print(number[i])
i = i + 1
運行結(jié)果如下:
1122
2366
4400
5577
8888
>>>
15.4、添加列表元素
15.4.1、在Python中使用append()方法添加列表元素
我們在《Python中的序列相加詳解》一節(jié)中說過:在Python中,序列相加支持兩種或者兩種以上的相同類型的序列相加。即兩個或者兩個以上的序列進行連接。但是不會去除重復的元素。操作方法:序列相加是使用“+”號運算符實現(xiàn)的。
其實不僅僅序列相加可以使用“+”號運算符實現(xiàn),在Python中添加列表元素也可以使用“+”號運算符實現(xiàn)。但是,這種添加方法執(zhí)行速度比Python內(nèi)置函數(shù)APPend()函數(shù)添加列表對象要慢。通常情況下,我們在添加列表元素的時候,使用列表對象的append()方法來實現(xiàn)。列表對象的 append()方法用于在列表末尾添加元素,語法如下:
listname.append(obj)
其中,listname為要添加元素的列表名稱;obj為要添加到末尾的對象。
如,定義一個3個數(shù)的元素列表,然后使用append()方法向該列表的末尾添加一個元素,可以使用下面代碼:
sousuo = ["baidu","sogou","bing"]
sousuo.append("Google")
print("更新后列表:",sousuo)
執(zhí)行代碼以后結(jié)果為:
更新后列表: ['baidu', 'sogou', 'bing', 'google']
>>>
15.4.2、在Python中使用extend()方法添加列表元素
上面講的是使用append()方法在列表末添加列表元素,如果將一個列表的全部元素,添加到另一個列表中,則使用列表對象的extend()方法添加列表元素。extend()方法具體的語法如下:
listname.extend(seq)
其中,listname為原列表;seq為要添加的列表。語句執(zhí)行以后,seq的內(nèi)容將追加到listname的后面。
列如,創(chuàng)建兩個列表,然后使用append()方法將第一個列表添加到第二個列表中,具體代碼如下:
s1 = ["床前明月光","疑是地上霜","舉頭望明月","低頭思故鄉(xiāng)"]
s2 = ["唐","李白","靜夜思"]
s2.extend(s1)
print(s2)
運行結(jié)果為:
['唐', '李白', '靜夜思', '床前明月光', '疑是地上霜', '舉頭望明月', '低頭思故鄉(xiāng)']
>>>
15.4.3、在Python中使用insert()方法添加列表元素
append() 和 extend() 方法只能在列表末尾插入元素,如果希望在列表中間某個位置插入元素,那么可以使用 insert() 方法。
insert() 的語法格式如下:
listname.insert(index , obj)
其中,index 表示指定位置的索引值。insert() 會將 obj 插入到 listname 列表第 index 個元素的位置。
當插入列表或者元組時,insert() 也會將它們視為一個整體,作為一個元素插入到列表中,這一點和 append() 是一樣的。
列如,定義一個3個數(shù)的元素列表,然后使用insert() 方法向該列表的中間添加一個元素,可以使用下面代碼:
sousuo = ["baidu","sogou","bing"]
sousuo.insert(2,["google","360"]) #在第3的位置插入列表,整個列表被當成一個元素
print("更新后列表:",sousuo)
執(zhí)行結(jié)果為:
更新后列表: ['baidu', 'sogou', ['google', '360'], 'bing']
>>>
15.5、修改列表元素
在Python中修改列表元素有兩種情況,一個是修改單個元素,一個是修改一組元素?,F(xiàn)在站長在線分別講解:
15.5.1、在Python中修改單個元素
修改單個元素非常簡單,直接對元素賦值即可。使用索引得到列表元素后,通過“=”賦值符就改變了元素的值。
請看下面的例子:
num = [88, 66, 33, 17, 99, 28, 18]
num[2] = 56 #使用正數(shù)索引
num[-3] = -5 #使用負數(shù)索引
print(num)
運行結(jié)果如下:
[88, 66, 56, 17, -5, 28, 18]
>>>
15.5.2、在Python中修改一組元素
Python 支持通過切片語法給一組元素賦值。在進行這種操作時,如果不指定步長(step 參數(shù)),Python 就不要求新賦值的元素個數(shù)與原來的元素個數(shù)相同;這意味,該操作既可以為列表添加元素,也可以為列表刪除元素。
num = [88, 66, 33, 17, 99, 28, 18]
#修改第 3~6 個元素的值(不包括第6個元素)
num[3:6] = [56,17,-5]
print(num)
運行結(jié)果如下:
[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)
運行結(jié)果:
[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 <module>
num[4:4] = 100
TypeError: can only assign an iterable
>>>
但是如果使用字符串賦值,Python 會自動把字符串轉(zhuǎn)換成序列,其中的每個字符都是一個元素,請看下面的代碼:
s = list("Hello Python")
s[6:12] = "XYZ"
print(s)
執(zhí)行結(jié)果如下:
['H', 'e', 'l', 'l', 'o', ' ', 'X', 'Y', 'Z']
>>>
使用切片語法時也可以指定步長(step 參數(shù)),但這個時候就要求所賦值的新元素的個數(shù)與原有元素的個數(shù)相同,例如:
num = [88, 66, 33, 17, 99, 28, 18]
#步長為2,為第1、3、5個元素賦值
num[1: 6: 2] = [55, -55, 59.5]
print(num)
運行結(jié)果為:
[88, 55, 33, -55, 99, 59.5, 18]
>>>
15.6、除列表元素
在 Python 列表中刪除元素主要分為以下 3 種場景(共4種方法):
a、根據(jù)目標元素所在位置的索引進行刪除,可以使用 del 關(guān)鍵字或者 pop() 方法。
b、根據(jù)元素本身的值進行刪除,可使用列表提供的 remove() 方法。
c、將列表中所有元素全部刪除,可使用列表提供的 clear() 方法。
下面針對這3種場景的4種方法進行一一講解:
15.6.1、del:根據(jù)索引值刪除元素
del 是 Python 中的關(guān)鍵字,專門用來執(zhí)行刪除操作,它不僅可以刪除整個列表,還可以刪除列表中的某些元素。
我們已經(jīng)在《Python中列表的創(chuàng)建和刪除詳解》中講解了如何刪除整個列表,所以本節(jié)只講解如何刪除列表元素。
del 可以刪除列表中的單個元素,其語法格式為:
del listname[index]
其中,listname 表示列表名稱,index 表示元素的索引值。
列如,定義一個保存一個3個元素的列表,刪除其中的一個元素,代碼為:
sousuo = ["baidu","sogou","bing"]
del sousuo[0] #刪除第一個,正數(shù)索引
#del sousuo[1] #刪除第二個
#del sousuo[-1] #刪除最后一個,負數(shù)索引
print(sousuo)
執(zhí)行結(jié)果為:
['sogou', 'bing']
>>>
看見了吧,我上面寫代碼的時候使用#代碼 注釋了第三行和第四行的,要不然去掉注釋,執(zhí)行下來,一個元素都不剩了,只是剩下[]了。
del 也可以刪除中間一段連續(xù)的元素,格式為:
del listname[start : end]
其中,start 表示起始索引,end 表示結(jié)束索引。del 會刪除從索引 start 到 end 之間的元素,不包括 end 位置的元素。
列如,定義一個保存5個元素的列表,刪除其中的第2~4個,不包括第4個,代碼如下:
jianzhan = ["Python","html","php","css","mysql"]
del jianzhan[1:3]
print(jianzhan)
執(zhí)行結(jié)果為:
['Python', 'CSS', 'MySQL']
>>>
當然,也可以定義一個保存5個元素的列表,刪除其中的第2~4個,包括第4個,代碼如下:
jianzhan = ["Python","html","php","CSS","MySQL"]
del jianzhan[1:4]
print(jianzhan)
執(zhí)行結(jié)果如下:
['Python', 'MySQL']
>>>
15.6.2、pop():根據(jù)索引值刪除元素
15.6.2.1、描述:pop() 函數(shù)用于移除列表中的一個元素(默認最后一個元素),并且返回該元素的值。
15.6.2.2、語法:pop()方法語法如下:
list.pop(-1)
15.6.2.3、參數(shù):可選參數(shù),要移除列表元素的索引值,不能超過列表總長度,默認為 index=-1,刪除最后一個列表值。
15.6.2.4、返回值:該方法返回從列表中移除的元素對象。
15.6.2.5、實例:
sousuo = ["baidu","sogou","bing"]
ss = sousuo.pop(1) #刪除列表中的第二個元素
print("刪除的項為 :", ss)
print("列表現(xiàn)在為 : ", sousuo)
運行結(jié)果如下:
刪除的項為 : sogou
列表現(xiàn)在為 : ['baidu', 'bing']
>>>
15.6.3、remove():根據(jù)元素值進行刪除
15.6.3.1、描述:remove() 函數(shù)用于移除列表中某個值的第一個匹配項。(而且必須保證該元素是存在的。)
15.6.3.2、語法:list.remove(obj)
其中l(wèi)ist為列表,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)
執(zhí)行結(jié)果如下:
[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 <module>
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)
執(zhí)行結(jié)果如下:
[88, 33, 17, 66, 28, 18]
[88, 33, 17, 28, 18]
[88, 33, 17, 28, 18]
>>>
說明:列表對象的count()方法是用于判斷指定的元素出現(xiàn)的次數(shù)返回的結(jié)果為0時,不是不存在該元素。關(guān)于count()方法的詳細介紹,我們在下一個知識點《在Python中對列表進行統(tǒng)計計算詳解》中會有詳細說明。
15.6.4、clear():刪除列表所有元素
在Python clear() 用來刪除列表的所有元素,即清空列表,請看下面的代碼:
s = ["床前明月光","疑是地上霜","舉頭望明月","低頭思故鄉(xiāng)"]
s.clear()
print(s)
運行結(jié)果為:
[]
>>>
15.7、在python中對列表進行統(tǒng)計和計算
15.7.1、在Python中使用count()方法獲取指定的元素的出現(xiàn)次數(shù)。
我們在前面學過通過len()函數(shù)計算列表的長度,但是他是不管也沒有重復的,而今天要講的,使用列表對象的count()方法可以獲取指定元素在列表中出現(xiàn)的次數(shù)。count()方法的數(shù)值類型語法格式如下:
listname.count(obj)
其中,listname代表列表的名稱;obj表示要被判斷出現(xiàn)次數(shù)的對象,這里是指精確匹配,而不是是元素值的一部分。
例如,創(chuàng)建一個8個數(shù)值的數(shù)列列表,使用count()方法統(tǒng)計數(shù)值出現(xiàn)的次數(shù)。代碼如下:
s = [66,88,13,59,66,39,100,59]
s1 = s.count(66)
s2 = s.count(88)
s3 = s.count(99)
print("66出現(xiàn)的次數(shù):",s1)
print("88出現(xiàn)的次數(shù):",s2)
print("99出現(xiàn)的次數(shù):",s3)
運行結(jié)果如下:
66出現(xiàn)的次數(shù): 2
88出現(xiàn)的次數(shù): 1
99出現(xiàn)的次數(shù): 0
>>>
count()方法除了統(tǒng)計數(shù)值型列表,還是可以統(tǒng)計字符串里某個字符串或子字符串出現(xiàn)的次數(shù),如果沒有就返回為0??蛇x參數(shù)為在字符串搜索的開始與結(jié)束位置。
語法如下:
str.count(sub,start,end)
此方法中,各參數(shù)的具體含義如下:
str:表示原字符串;
sub:表示要檢索的字符串;
start:指定檢索的起始位置,也就是從什么位置開始檢測。如果不指定,默認從頭開始檢索;
end:指定檢索的終止位置,如果不指定,則表示一直檢索到結(jié)尾。
列如:檢索字符串“olzz.com/xuetang/python”中,“/”的出現(xiàn)次數(shù)。
str = "olzz.com/xuetang/python"
num = str.count('/')
print("'/'出現(xiàn)的次數(shù):",num)
運行結(jié)果為:
'/'出現(xiàn)的次數(shù): 2
>>>
下面我們指定字符串的起址位置:
str = "olzz.com/xuetang/python"
num = str.count('/',1,10) #指定'/'在第2個到第11個字符之間
print("'/'出現(xiàn)的次數(shù):",num)
運行結(jié)果為:
'/'出現(xiàn)的次數(shù): 1
>>>
15.7.2、在Python中使用index()方法獲取指定元素首次出現(xiàn)的位置
在Python列表對象的index()方法可以獲取指定元素在列表中首次出現(xiàn)的位置(索引),在數(shù)值類型的語法格式如下:
listname.index(obj)
參數(shù)說明:
listname:表示列表的名稱。
obj:表示要查找的對象(精確匹配)。
返回值:首次出現(xiàn)的索引值。
s = [66,88,13,59,66,39,100,59]
s1 = s.index(66)
s2 = s.index(59)
print("66首次出現(xiàn)的索引位置:",s1)
print("59首次出現(xiàn)的索引位置:",s2)
運行結(jié)果如下:
66首次出現(xiàn)的位置: 0
59首次出現(xiàn)的位置: 3
>>>
如果索引的值,列表里面,就會拋出異常:
s = [66,88,13,59,66,39,100,59]
s3 = s.index(77)
print("77首次出現(xiàn)的索引位置:",s3)
運行結(jié)果為:
Traceback (most recent call last):
File "D:\Python\Python310\Doc\000.py", line 2, in <module>
s3 = s.index(77)
ValueError: 77 is not in list
>>>
和上方的count()方法一樣,index()方法可以用于數(shù)值型的檢索,也可以用于檢索是否包含指定的字符串,不同之處在于,當指定的字符串不存在時,index() 方法會拋出異常。(count()方法出現(xiàn)次數(shù)為0,而不是異常)。
str.index(sub,start,end)
此方法中,各參數(shù)的具體含義如下:
str:表示原字符串;
sub:表示要檢索的字符串;
start:指定檢索的起始位置,也就是從什么位置開始檢測。如果不指定,默認從頭開始檢索;
end:指定檢索的終止位置,如果不指定,則表示一直檢索到結(jié)尾。
列如:檢索字符串“olzz.com/xuetang/python”中,“/”首次出現(xiàn)的位置。
str = "olzz.com/xuetang/python"
num = str.index('/')
print("'/'首次出現(xiàn)的位置:",num)
執(zhí)行結(jié)果如下:
'/'首次出現(xiàn)的位置: 8
>>>
下面我們指定字符串的起址位置:
str = "olzz.com/xuetang/python"
num = str.index('/',1,10) #指定'/'在第2個到第11個字符之間
print("'/'首次出現(xiàn)的位置:",num)
執(zhí)行結(jié)果:
'/'首次出現(xiàn)的位置: 8
>>>
執(zhí)行結(jié)果是一樣的,因為我指定的位置是一樣,現(xiàn)在我來指定到后面這個區(qū)域,使用負數(shù)索引:
str = "olzz.com/xuetang/python"
num = str.index('/',-10,-1) #指定'/'在最后一個到最后10個字符之間
print("'/'首次出現(xiàn)的位置:",num)
運行結(jié)果如下:
'/'首次出現(xiàn)的位置: 16
>>>
這個結(jié)果是從左到右的,因為指定區(qū)域排除了第8個,所以滿足要求的是第16個了。
15.7.3、在Python中使用sum()函數(shù)統(tǒng)計數(shù)值列表的元素和
在講count()方法和index()方法的時候,我是把數(shù)值和字符串,分開講解的,因為使用數(shù)值的方法比字符串的方法要簡單。
但是在sum()函數(shù)中,只能統(tǒng)計數(shù)值了。語法格式如下:
sum(iterable[, start])
相關(guān)說明如下:
iterable:可迭代對象,如:列表、元組、集合。
start:指定相加的參數(shù),如果沒有設置這個值,默認為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名男學生的數(shù)學成績,和10名女學生的數(shù)學成績,然后應用sum()函數(shù)計算男學生和女學生的成績之和。對應的代碼如下:
s1 = [93,95,86,98,99,99,89,100,100,97] #10名男學生的數(shù)學成績列表
s2 = [98,96,86,88,96,100,93,87,95,95] #10名女學生的數(shù)學成績列表
z1 = sum(s1)
z2 = sum(s2)
print("10名男學生的數(shù)學總分數(shù)為:",z1)
print("10名女學生的數(shù)學總分數(shù)為:",z2)
運行結(jié)果為:
10名男學生的數(shù)學總分數(shù)為: 956
10名女學生的數(shù)學總分數(shù)為: 934
>>>
15.8、在python中對列表進行排序
在Python實際開發(fā)中,會經(jīng)常需要用到對列表進行排序。下面站長在線對列表的排序講解幾種常用的方法:
15.8.1、使用列表對象的sort()方法進行排序。
列表對象提供了sort()方法用于對原列表中的元素進行排序。排序以后,原列表中的元素順序?qū)l(fā)生改變。列表對象的sort()方法的語法格式如下:
listname.sort(key=None,reverse=False)
相關(guān)的參數(shù)說明如下:
listname:表示要進行排序的列表。
key:表示指定一個從每個列表元素中提取一個比較鍵。(列如,設置“key=str.lower”表示在排序時不區(qū)分字母的大小寫)。
reverse:可選參數(shù),如果將其值指定為True,則表示降序排序;如果將其指定為False,則表示升序排列。默認為升序排列。
列如,某中學初三1班的10名男學生的數(shù)學成績,然后應用sort()方法對其進行排序,代碼如下:
s = [93,95,86,98,99,99,89,100,100,97]
print("原列表:",s)
s.sort()
print("升序:",s)
s.sort(reverse=True)
print("降序:",s)
執(zhí)行結(jié)果如下:
原列表: [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()方法除了可以對數(shù)值進行排序,還可以多字符串進行排序。對字符串進行排序默認區(qū)分大小寫,如果想不區(qū)分大小寫,則需要指定其key參數(shù)。
列如,定義保存一個大小寫不同的英文字符串列表,然后應用sort()方法對其進行排序,代碼如下:
s = ['hello','polly','Lucy','Lily','Han Meimei']
s.sort()
print("區(qū)分字母大小寫:",s)
s.sort(key=str.lower)
print("不區(qū)分字母大小寫:",s)
運行結(jié)果如下:
區(qū)分字母大小寫: ['Han Meimei', 'Lily', 'Lucy', 'hello', 'polly']
不區(qū)分字母大小寫: ['Han Meimei', 'hello', 'Lily', 'Lucy', 'polly']
>>>
說明:sort()方法對列表排序時,最中文的支持不好,排序的結(jié)果與我們常用的按拼音排序或者筆畫排序都不一致。要想實現(xiàn)對中文內(nèi)容的排序,需要重新編寫相應的方法,不能直接使用sort()方法。如:
s = ['張三','李四','王五','李明','楊軍']
s.sort()
print(s)
運行結(jié)果:
['張三', '李四', '李明', '楊軍', '王五']
>>>
這個結(jié)果,我們根本看不懂,所以不能直接使用sort()方法對中文列表排序。
15.8.2、使用內(nèi)置的sorted()函數(shù)進行排序。
在Python中,提供了一個內(nèi)置的sorted()函數(shù),用于對列表進行排序。使用該函數(shù)進行排序后,原列表的元素順序不變。sorted()函數(shù)的語法格式如下:
sorted(iterable,key=None,reverse=False)
相關(guān)的參數(shù)說明如下:
iterable:表示要進行排序的列表。
key:表示指定從每個列表元素中提取一個比較鍵。(列如,設置“key=str.lower”表示在排序時不區(qū)分字母的大小寫)。
reverse:可選參數(shù),如果將其值指定為True,則表示降序排序;如果將其指定為False,則表示升序排列。默認為升序排列。
列如,某中學初三1班的10名男學生的數(shù)學成績,然后應用sorted()函數(shù)對其進行排序,代碼如下:
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)
運行結(jié)果如下:
升序: [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()函數(shù)的作用基本相同。不同的地方有以下兩點:
a、sort()方法只能處理列表類型數(shù)據(jù)的排序;sorted()函數(shù)則可以處理多種類型數(shù)據(jù)的排序。
b、sort()方法會修改原來的列表的元素的排序;sorted()函數(shù)不會修改原來的數(shù)據(jù),會建立一個原列表的副本,只是返回一個排序后的列表。
15.8.3、使用reverse()方法進行反向排序。
我們在使用sort()方法和sorted()函數(shù)的時候,在處理升序和降序的時候用到了reverse。
reverse是反轉(zhuǎn),相反,背面,反面的意思。其實還有一種特殊的排序就是反向排序。相關(guān)代碼如下:
s = [93,95,86,98,99,99,89,100,100,97]
python = ["優(yōu)雅","明確","簡單"]
s.reverse()
python.reverse()
print(s)
print(python)
運行結(jié)果如下:
[97, 100, 100, 89, 99, 99, 98, 86, 95, 93]
['簡單', '明確', '優(yōu)雅']
>>>
在實際的Python開發(fā)中,使用reverse()方法進行反向排序,很多的教程中,沒有提及了。因為使用的比較少。
15.9、在python中的列表推導式
含義:列表推導式(list comprehension)也稱為列表解析式,就是可以快速生成一個列表,或者根據(jù)某個列表生成滿足指定需求的列表。
列表推導式,通常有以下幾種類型的語法格式:
15.9.1、生成指定范圍的數(shù)值列表,語法格式如下:
list = [Expression for var in range]
詳細參數(shù)說明:
list:表示生成的列表名稱
Expression:表達式,用于計算新列表的元素
var:循環(huán)變量
range:采用range()函數(shù)生成的range對象
例如,生成一個10以內(nèi)的序列,和10以內(nèi)的偶數(shù)序列
a1 = [i for i in range(10)] #生成一個10以內(nèi)的序列
a2 = [i for i in range(10) if i % 2 == 0] #生成一個10以內(nèi)的偶數(shù)序列
print(a1)
print(a2)
運行結(jié)果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
>>>
再來看一個例子:10以內(nèi)的平方數(shù),代碼如下:
s = [i**2 for i in range(10)]
print(s)
運行結(jié)果如下:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>
上面的比較簡單,下面我們再來一個,生成10以內(nèi)的5個隨機數(shù)列表,代碼如下:
import random #導入random標準庫
s = [random.randint(0,10) for i in range(5)]
print("生成的5個隨機數(shù)為:",s)
運行以后結(jié)果為:
生成的5個隨機數(shù)為: [6, 4, 7, 5, 0] #多次運行,結(jié)果都不一樣,隨機生成
>>>
15.9.2、根據(jù)列表生成指定需求的列表,語法如下:
newlist = [Expression for var in list]
詳細參數(shù)說明如下:
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)
運行結(jié)果如下:
進貨價: [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]
詳細參數(shù)說明如下:
newlist:表示新生成的列表名稱
Expression:表達式,用于計算新列表的元素
var:變量,值為后面列表的每個元素值
list:用于生成新列表的原列表
condition:條件表達式,用于指定篩選條件
列如,定義一個序列商品的進貨價,然后應用列表推導式生成一個進貨價小于10的列表,代碼如下:
jinhuo = [5,2,8,6,6,10,15,5]
s = [i for i in jinhuo if i<10]
print("進貨價:",jinhuo)
print("進貨價小于10的:",s)
運行結(jié)果如下:
進貨價: [5, 2, 8, 6, 6, 10, 15, 5]
進貨價小于10的: [5, 2, 8, 6, 6, 5]
>>>
15.10、python中二維列表的創(chuàng)建、訪問、應用
二維列表的概念:
二維列表是將其他列表當做列表的元素放在一個列表當中,也就是列表的嵌套。
站長在線溫馨提示:二維列表是多維列表的基礎(chǔ),未來還會出現(xiàn)三維列表,四維列表等多維列表。
在Python中,創(chuàng)建二維列表有以下3種常用的方法:
15.10.1、直接定義二維列表。
在Python中,二維列表就是包含列表的列表。即一個列表的每個元素又都是一個列表。
在創(chuàng)建二維列表時,我們可以直接使用列表的語法格式,進行定義:
listname = [[元素11,元素12,元素13,......,元素1n],
[元素21,元素22,元素23,......,元素2n],
......,
[元素n1,元素n2,元素n3,......,元素nn]]
其中的相關(guān)參數(shù)說明如下:
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位同學的語數(shù)英的成績列表,代碼如下:
cj = [['名字','語文','數(shù)學','英語'],
['張三',88,98,95],
['李四',85,99,91],
['王五',86,88,89]]
print(cj)
運行上面代碼,創(chuàng)建的二維列表如下:
[['名字', '語文', '數(shù)學', '英語'], ['張三', 88, 98, 95], ['李四', 85, 99, 91], ['王五', 86, 88, 89]]
>>>
15.10.2、使用嵌套的for循環(huán)創(chuàng)建二維列表。
在Python中,創(chuàng)建二維列表,可以使用嵌套的for循環(huán)來實現(xiàn),如創(chuàng)建一個5行5列的二維列表,可以使用下面代碼:
s = [] # 創(chuàng)建一個空列表
for i in range(5): # 創(chuàng)建一個5行的列表(行)
s.append([]) # 在空的列表中添加空的列表
for j in range(5): # 循環(huán)每一行的每一個元素(列)
s[i].append(j) # 為內(nèi)層列表添加元素
print(s) # 輸出列表
運行上面的代碼,創(chuàng)建的二維列表如下:
[[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、使用列表推導式創(chuàng)建二維列表。
我們剛剛在上一個知識點《在python中的列表推導式詳解》學習過列表推導式。列表推導式就是可以快速生成一個列表,或者根據(jù)某個列表生成滿足指定需求的列表。
在這里我們也可以使用列表推導式來創(chuàng)建二維列表,并且是被推薦的方法,而且語法簡單。
比如使用列表推導式的方法創(chuàng)建一個5行5列的二維列表,代碼如下:
s = [[j for j in range(5)] for i in range(5)]
print(s)
執(zhí)行上面代碼,創(chuàng)建的二維列表結(jié)果如下:
[[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、二維列表的訪問
我們在創(chuàng)建好二維列表以后,可以通過下列語法,對列表元素的訪問:
listname[索引1][索引2]
其中,相關(guān)的參數(shù)說明為:
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列的元素
運行結(jié)果為:
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、二維列表的應用
使用二維列表輸出不同版式的古詩《靜夜思》
-- 橫版 --
床前明月光
疑是地上霜
舉頭望明月
低頭思故鄉(xiāng)
-- 豎版 --
低舉疑床
頭頭是前
思望地明
故明上月
鄉(xiāng)月霜光
站長在線溫馨提醒:橫版是從左往右讀,豎版是從右往左讀的。
我們在IDLE中新建一個文件,在該文件中,定義4個字符串為《靜夜思》的詩句,再定義一個二維列表,使用嵌套的for循環(huán),將古詩以橫版輸出,再將二維列表進行逆序排列,最后使用嵌套的for循環(huán),將古詩以豎版輸出,代碼如下:
str1 = '床前明月光'
str2 = '疑是地上霜'
str3 = '舉頭望明月'
str4 = '低頭思故鄉(xiāng)'
verse = [list(str1), list(str2), list(str3), list(str4)] # 定義一個二維列表
print('\n-- 橫版 --\n')
for i in range(4): # 循環(huán)古詩的每一行
for j in range(5): # 循環(huán)每一行的每個字(列)
if j == 4: # 如果是一行中的最后一個字
print(verse[i][j]) # 換行輸出
else:
print(verse[i][j], end='') # 不換行輸出
verse.reverse() # 對列表進行逆序排列
print('\n-- 豎版 --\n')
for i in range(5): # 循環(huán)每一行的每個字(列)
for j in range(4): # 循環(huán)新逆序排列后的第一行
if j == 3: # 如果是最后一行
print(verse[j][i]) # 換行輸出
else:
print(verse[j][i], end='') # 不換行輸出
運行結(jié)果如下:
-- 橫版 --
床前明月光
疑是地上霜
舉頭望明月
低頭思故鄉(xiāng)
-- 豎版 --
低舉疑床
頭頭是前
思望地明
故明上月
鄉(xiāng)月霜光
>>>
原理解析:
15.10.5.1、先將古詩的每一行的字符串,使用list()
函數(shù)轉(zhuǎn)換成列表。列表代碼如下:
[['床','前','明','月','光'],
['疑','是','地','上','霜'],
['舉','頭','望','明','月'],
['低','頭','思','故','鄉(xiāng)']]
15.10.5.2、列表對象的reverse()
方法用于對列表進行逆向排序,將列表的最后一個移到第一個,倒數(shù)第二個移到第二個,以此類推。代碼如下:
[['低', '頭', '思', '故', '鄉(xiāng)'],
['舉', '頭', '望', '明', '月'],
['疑', '是', '地', '上', '霜'],
['床', '前', '明', '月', '光']]
15.10.5.3、橫版是按行打印,豎版卻是按列打印,按列打印如下:
低舉疑床
頭頭是前
思望地明
故名上月
鄉(xiāng)月霜光
看見了吧,我們把讀不通順的,按列打印的“低舉疑床,頭頭是前,思望地明,故名上月,鄉(xiāng)月霜光”就正是我們要的按豎排打印的詩。豎排的寫法是從右往左寫的。讀也從右邊讀起,就正是我們的想要的詩了。
以上10點實際上是分了10個文章才能講解完畢,如果僅僅一節(jié)課來講,寫教程都要寫三五天,而且學的時候,一天都不一定學得完,估計也得分三五天才能學完。
下節(jié)預告:零基礎(chǔ)Python完全自學教程16:Python中的元組
相關(guān)閱讀:
本文地址:http://003188.cn/pythonliebiao.html
阿里云虛擬主機1G空間,120元一年
香港、美國虛擬主機100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡