第三章 列表簡介
列表是什么
列表由一系列特定順序排列的元素組成,其中多個(gè)元素之間沒有任何關(guān)系,列表通常包含多個(gè)元素,因此給列表指定一個(gè)表示復(fù)數(shù)的名稱(如letters、digits或names)。
在python中,用方括號([ ])表示列表,并用逗號分割其中的元素。下面是一個(gè)簡單的示例,
vim bicycles.py
bicycles = ['trek','cannondale','specialized']
print(bicycles)
執(zhí)行
python3 bicycles.py
['trek', 'cannondale', 'specialized']
訪問列表元素
列表是有序集合,因此要訪問列表的任意元素,只需要將該元素的位置(索引)告訴python即可。要訪問列表元素,可指出列表的名稱,再指出元素的索引,并且放在花括號內(nèi);
當(dāng)你請求列表元素時(shí),python只返回該元素,而不包括方括號;
索引從0而不是1開始
在python中,第一個(gè)列表元素的索引為0,而不是1.大多數(shù)編程語言是如此規(guī)定的,這與列表操作的底層實(shí)現(xiàn)相關(guān)。
bicycles = ['trek','cannondale','specialized']
print(bicycles[1])
print(bicycles[1].title())
執(zhí)行,返回的是列表中的第二個(gè)元素
python3 bicycles.py
cannondale
Cannondale
python為訪問最后一個(gè)列表元素提供了一種特殊元素。通過將索引指定為 -1,可讓python返回最后一個(gè)列表元素。
python3 bicycles.py
specialized
這種方法很有用,因?yàn)槟憬?jīng)常需要在不知道列表長度的情況下訪問最后的元素。這種約定也適用于負(fù)數(shù)索引。例如,索引 -2返回倒數(shù)第二個(gè)的列表元素,索引 -3返回倒數(shù)第三個(gè)列表元素,以此類推。
使用列表中的各個(gè)值
你可以像使用其它變量一樣使用列表中的各個(gè)值。例如可以使用 f 字符串根據(jù)列表中的值來創(chuàng)建消息。
bicycles = ['trek','cannondale','specialized']
messages = f"My first bicycle was a {bicycles[0].title()}."
print(messages)
我們使用了bicycles[0]的值生成了一個(gè)句子,并將其賦值給變量messages。輸出的是一個(gè)簡單的句子。
執(zhí)行
python3 bicycles.py
My first bicycle was a Trek.
修改、添加和刪除元素
你創(chuàng)建的大多數(shù)列表將是動(dòng)態(tài)的,這意味著列表創(chuàng)建后,將隨著程序的運(yùn)行進(jìn)行增刪元素。例如,你創(chuàng)建一個(gè)游戲,要求玩家射殺從天而降的外星人。為此,可在開始時(shí)將一些外星人存儲(chǔ)在列表中,然后每當(dāng)有外星人被射殺時(shí),都將其從列表中刪除,而每次有新的外星人出現(xiàn)在屏幕時(shí),都將其添加到列表中。在整個(gè)游戲運(yùn)行期間,外星人列表的長度都將不斷變化。
修改列表元素
修改列表元素的語法與訪問列表元素的語法類似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定改元素的新值。
例如,假設(shè)有一個(gè)摩托車列表,其中的第一個(gè)元素為 'honda',如何修改它的值哪?
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
首先定義一個(gè)摩托車列表,其中的第一個(gè)元素為 'handa'.接下來,將第一個(gè)元素的值修改為 'ducati'。輸出表明,第一個(gè)元素的值確實(shí)變了,但其他列表元素的值沒變:
python3 mororcycles.py
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
你可以修改任意列表元素的值,而不僅僅是第一個(gè)元素的值。
在列表中添加元素
你可能出于眾多原因要在列表中添加新元素。例如,你可能希望游戲中出現(xiàn)新的外星人、添加可視化數(shù)據(jù)或給網(wǎng)站添加新注冊的新用戶。python提供了多種在既有列表中添加新數(shù)據(jù)的方式。
在列表末尾添加元素
在列表中添加新元素時(shí),最簡單的方式是將元素附加(append)到列表。給列表附加元素時(shí),它將添加到列表末尾。繼續(xù)使用前一個(gè)示例中的列表,在其末尾添加新元素 'ducati':
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles.append('dducati')
print(motorcycles)
方法append() 將元素 'ducati' 添加到列表,而不影響其它列表元素。
執(zhí)行
python3 mororcycles.py
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'dducati']
方法append()讓動(dòng)態(tài)的創(chuàng)建列表易如反掌。例如,你可以創(chuàng)建一個(gè)空列表,再使用一系列函數(shù)調(diào)用append()來添加元素。,下面將創(chuàng)建一個(gè)空列表,并給其添加一系列元素。
motorcycles = [ ]
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
這種創(chuàng)建列表的方式及其常見,因?yàn)榻?jīng)常要等程序運(yùn)行后,你才知道用戶要在程序中存儲(chǔ)哪些數(shù)據(jù)。為控制用戶,可以先創(chuàng)建一個(gè)空列表,用于存儲(chǔ)用戶將要輸入的值,然后將用戶提供的每個(gè)數(shù)值附加到列表中。
在列表中插入元素
使用方法insert()可在列表的任何位置添加新元素。為此,你需要指定新元素的索引和值。
motorcycles = ['honda','yamaha','suzuki']
motorcycles.insert(0,'ducati')
print(motorcycles)
在這個(gè)示例中,值 'ducati' 被插入到了列表開頭。方法insert() 在索引0處添加空間,并將值 'ducati' 存儲(chǔ)到這個(gè)地方。這種操作將列表中既有的每個(gè)元素都右移一個(gè)位置;
python3 mororcycles.py
['ducati', 'honda', 'yamaha', 'suzuki']
從列表中刪除元素
你需要從列表中刪除一個(gè)或多個(gè)元素。例如,玩家將空中的一個(gè)外星人射殺后,你很可能要將其從存活的的外星人列表中刪除;當(dāng)用戶在你創(chuàng)建的web應(yīng)用中注銷賬戶時(shí),你就需要將該用戶從活動(dòng)用戶列表中刪除。你可以根據(jù)位置或值來刪除列表中的元素。
使用del語句刪除元素
如果知道要?jiǎng)h除的元素在列表中的位置,可使用del語句。
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
執(zhí)行
python3 mororcycles.py
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
使用方法pop() 刪除元素
有時(shí)候,你要將元素從列表中刪除,并接著使用它的值。例如,你可能需要獲取剛被射殺的外星人的x坐標(biāo)和y坐標(biāo),以便在響應(yīng)的位置顯示爆炸效果;在web應(yīng)用程序中,你可能要將用戶從活躍成員列表中刪除,并將其加入非活躍成員列表中。
方法pop()刪除列表末尾的元素,并讓你能夠接著使用它。術(shù)語彈出(pop)源自這樣的類比:列表就像一個(gè)棧,而刪除列表末尾的元素相當(dāng)于彈出棧頂元素。
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
poped_motorcycles = motorcycles.pop()
print(motorcycles)
print(poped_motorcycles)
首先定義并打印列表motorcycles 的值。接下來,從這個(gè)列表中彈出一個(gè)值,并賦值給poped_motorcycles 。然后打印這個(gè)列表,以核實(shí)從中刪除了一個(gè)值。最后彈出打印的值,以證明我們依然能夠訪問這個(gè)被刪除的值。輸出表明,列表末尾的值 'suzuki' 已刪除,它現(xiàn)在被賦值給了變量 poped_motorcycles。
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
彈出列表中任何位置元素的值
實(shí)際上,可以使用pop() 來刪除列表中任意位置的元素。只需要在圓括號內(nèi)指定要?jiǎng)h除的索引即可。利用f 字符串,將變量關(guān)聯(lián)的信息來創(chuàng)建一條完整的信息。
motorcycles = ['honda','yamaha','suzuki']
first_motorcycles = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_motorcycles.title()}")
首先通過pop() 彈出列表第一個(gè)元素,然后打印出一條與該元素有關(guān)的簡單句子。
執(zhí)行
python3 mororcycles.py
The first motorcycle I owned was a Honda
根據(jù)值刪除元素
有時(shí)候,你不知道要從列表中刪除的值所在的位置。如果只知道要?jiǎng)h除的值,可利用方法 remove()。
從列表 motorcycles中刪除值 'ducati'。
motorcycles = ['honda','yamaha','suzuki','ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
remove() 可以讓python確定 'ducati'出現(xiàn)在列表什么地方,并將該元素刪除。
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
使用remove() 從列表刪除元素時(shí),也可以接著使用它的值。下面刪除值 'ducati' 并打印一條消息,指出要將其從列表中刪除的原因:
motorcycles = ['honda','yamaha','suzuki','ducati']
print(motorcycles) = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print(f"\nA {too_expensive.title()} is too expensive for me.")
定義列表 motorcycles后,將值 'ducati' 賦值給變量 too_expensive。接下來,使用這個(gè)變量來告訴python將哪個(gè)值從列表刪除。最后,值 'ducati' 已經(jīng)從列表刪除,但可通過變量 too_expensive 來訪問它。我們打印了一條消息。
執(zhí)行
python3 mororcycles.py
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
方法 remove() 只刪除第一個(gè)指定的值。如果要?jiǎng)h除的值可能在列表中出現(xiàn)多次,就需要使用for循環(huán)來確保每個(gè)值都刪除。這將在第7章介紹。
組織列表
在你創(chuàng)建的列表中,元素的排列順序常常是無法預(yù)測的,因?yàn)槟悴⒎强偰芸刂朴脩籼峁?shù)據(jù)的順序。但你經(jīng)常需要以特定的順序呈現(xiàn)順序,python提供了很多組織列表的方式,可根據(jù)具體情況選用。
使用后方法 sort() 對列表永久排序
python 方法sort() 讓你能夠較為輕松地對列表進(jìn)行排序。假設(shè)你有一個(gè)汽車列表,并要讓其中的汽車按字母順序排列。所有列表元素均為小寫。
cars = ['bmw','audi','toyota','subaru']
cars.sort()
print(cars)
方法sort() 對列表cars進(jìn)行永久排列。
執(zhí)行
python3 cars.py
['audi', 'bmw', 'subaru', 'toyota']
還可以按與字母順序相反的順序排列列表元素,只需向sort()方法傳遞參數(shù) reverse=True 即可。
cars = ['bmw','audi','toyota','subaru']
cars.sort(reverse=True)
print(cars)
執(zhí)行
python3 cars.py
['toyota', 'subaru', 'bmw', 'audi']
使用方法 sorted()對列表進(jìn)行臨時(shí)排序
要保留列表元素原來的排列順序,同時(shí)以特定的順序呈現(xiàn)它們,可使用函數(shù) sorted() 。函數(shù)sorted() 讓你能夠按特定順序顯示列表元素,同時(shí)不影響它們在列表中的原始順序。
cars = ['bmw','audi','toyota','subaru']
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("Here is the original list again:")
print(cars)
如果要按與字母順序相反的順序顯示列表,也可以向函數(shù) sorted() 傳遞參數(shù) reverse=True 。
執(zhí)行
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']
倒著打印列表
要反轉(zhuǎn)列表元素的排列順序,可使用方法 reverse()。
cars = ['bmw','audi','toyota','subaru']
print(cars)
cars.reverse()
print(cars)
使用方法reverse() 不是按與字母順序相反的順序列表排列列表元素,而只是反轉(zhuǎn)列表的排列順序:
python3 cars.py
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
方法reverse() 永久性的修改列表元素的排列順序,但可隨時(shí)恢復(fù)到原來的排列順序,只需要對列表再次調(diào)用reverse() 即可。
確定列表的長度
使用函數(shù)len() 可快速獲悉列表的長度。在下面的示例中,列表包含四個(gè)元素,因此其長度為4:
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4
需要完成如下任務(wù)時(shí),len() 很有用:明確還有多少外星人未被射殺,確定需要管理多少項(xiàng)可視化數(shù)據(jù),計(jì)算網(wǎng)站有多少用戶注冊,等等。
注意 python計(jì)算列表元素時(shí)從1開始,因此確定列表長度時(shí),你應(yīng)該不會(huì)遇到差一錯(cuò)誤。
使用列表時(shí)避免索引錯(cuò)誤
剛開始使用列表時(shí),經(jīng)常會(huì)遇到一種錯(cuò)誤。假設(shè)你有一個(gè)包含三個(gè)元素的列表,卻要求獲取第四個(gè)元素時(shí),這將導(dǎo)致索引錯(cuò)誤。別忘了,當(dāng)訪問一個(gè)列表元素時(shí),都可以使用索引 -1.這在任何情況下都行之有效,即便你最后一次訪問列表時(shí),其長度發(fā)生了變化。索引總是返回最后一個(gè)列表元素,僅當(dāng)列表元素為空時(shí),這種訪問方式才會(huì)導(dǎo)致錯(cuò)誤。
?歡迎一起來交流學(xué)習(xí)?。?!