目錄
2. 使用方法pop()刪除元素
3. 彈出列表中任何位置處的元素
4. 根據值刪除元素
3 章 列表簡介
3.3 組織列表
3.3.1 使用方法 sort()對列表進行永久性排序
3.3.2 使用函數 sorted()對列表進行臨時排序
3.3.3 倒著打印列表
3.3.4 確定列表的長度
3.5 小結
2. 使用方法pop()刪除元素
有時候,你要將元素從列表中刪除,并接著使用它的值。例如,你可能需要獲取剛被射殺的 外星人的x和y坐標,以便在相應的位置顯示爆炸效果;在Web應用程序中,你可能要將用戶從活 躍成員列表中刪除,并將其加入到非活躍成員列表中。
方法pop()可刪除列表末尾的元素,并讓你能夠接著使用它。術語彈出(pop)源自這樣的類 比:列表就像一個棧,而刪除列表末尾的元素相當于彈出棧頂元素。 下面從列表motorcycles中彈出一款摩托車:
1 motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
2 popped_motorcycle = motorcycles.pop()
3 print(motorcycles)
4 print(popped_motorcycle)
我們首先定義并打印了列表motorcycles(見1)。接下來,我們從這個列表中彈出一個值, 并將其存儲到變量popped_motorcycle中(見2)。然后我們打印這個列表,以核實從其中刪除了 一個值(見3)。最后,我們打印彈出的值,以證明我們依然能夠訪問被刪除的值(見4)。 輸出表明,列表末尾的值'suzuki'已刪除,它現在存儲在變量popped_motorcycle中:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
方法pop()是怎么起作用的呢?假設列表中的摩托車是按購買時間存儲的,就可使用方法 pop()打印一條消息,指出最后購買的是哪款摩托車:
motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print("The last motorcycle I owned was a " + last_owned.title() + ".")
輸出是一個簡單的句子,指出了最新購買的是哪款摩托車:
The last motorcycle I owned was a Suzuki
3. 彈出列表中任何位置處的元素
實際上,你可以使用pop()來刪除列表中任何位置的元素,只需在括號中指定要刪除的元素 的索引即可。
motorcycles = ['honda', 'yamaha', 'suzuki']
1 first_owned = motorcycles.pop(0)
2 print('The first motorcycle I owned was a ' + first_owned.title() + '.')
首先,我們彈出了列表中的第一款摩托車(見1),然后打印了一條有關這輛摩托車的消息 (見2)。輸出是一個簡單的句子,描述了我購買的第一輛摩托車:
The first motorcycle I owned was a Honda.
別忘了,每當你使用pop()時,被彈出的元素就不再在列表中了。
如果你不確定該使用del語句還是pop()方法,下面是一個簡單的判斷標準:如果你要從列表 中刪除一個元素,且不再以任何方式使用它,就使用del語句;如果你要在刪除元素后還能繼續 使用它,就使用方法pop()。
4. 根據值刪除元素
有時候,你不知道要從列表中刪除的值所處的位
置。如果你只知道要刪除的元素的值,可使 用方法remove()。
例如,假設我們要從列表motorcycles中刪除值'ducati'。
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
1 motorcycles.remove('ducati')
print(motorcycles)
1 處的代碼讓Python確定'ducati'出現在列表的什么地方,并將該元素刪除:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
使用remove()從列表中刪除元素時,也可接著使用它的值。下面刪除值'ducati',并打印一 條消息,指出要將其從列表中刪除的原因:
3 章 列表簡介
1 motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
2 too_expensive = 'ducati'
3 motorcycles.remove(too_expensive)
print(motorcycles)
4 print("\nA " + too_expensive.title() + " is too expensive for me.")
在1處定義列表后,我們將值'ducati'存儲在變量too_expensive中(見2)。接下來,我們 使用這個變量來告訴Python將哪個值從列表中刪除(見3)。最后,值'ducati'已經從列表中刪除, 但它還存儲在變量too_expensive中(見4),讓我們能夠打印一條消息,指出將'ducati'從列表 motorcycles中刪除的原因:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
注意 方法remove()只刪除第一個指定的值。如果要刪除的值可能在列表中出現多次,就需要 使用循環來判斷是否刪除了所有這樣的值。你將在第7章學習如何這樣做。
3.3 組織列表
在你創建的列表中,元素的排列順序常常是無法預測的,因為你并非總能控制用戶提供數據 的順序。這雖然在大多數情況下都是不可避免的,但你經常需要以特定的順序呈現信息。有時候, 你希望保留列表元素最初的排列順序,而有時候又需要調整排列順序。Python提供了很多組織列 表的方式,可根據具體情況選用。
3.3.1 使用方法 sort()對列表進行永久性排序
Python方法sort()讓你能夠較為輕松地對列表進行排序。假設你有一個汽車列表,并要讓其 中的汽車按字母順序排列。為簡化這項任務,我們假設該列表中的所有值都是小寫的。
cars.py
cars = ['bmw', 'audi', 'toyota', 'subaru']
1 cars.sort()
print(cars)
方法sort()(見1)永久性地修改了列表元素的排列順序。現在,汽車是按字母順序排列的, 再也無法恢復到原來的排列順序:
['audi', 'bmw', 'subaru', 'toyota']
你還可以按與字母順序相反的順序排列列表元素,為此,只需向sort()方法傳遞參數 reverse=True。下面的示例將汽車列表按與字母順序相反的順序排列:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
同樣,對列表元素排列順序的修改是永久性的:
['toyota', 'subaru', 'bmw', 'audi']
3.3.2 使用函數 sorted()對列表進行臨時排序
要保留列表元素原來的排列順序,同時以特定的順序呈現它們,可使用函數sorted()。函數 sorted()讓你能夠按特定順序顯示列表元素,同時不影響它們在列表中的原始排列順序。
下面嘗試對汽車列表調用這個函數。
cars = ['bmw', 'audi', 'toyota', 'subaru']
1 print("Here is the original list:")
print(cars)
2 print("\nHere is the sorted list:")
print(sorted(cars))
3 print("\nHere is the original list again:")
print(cars)
我們首先按原始順序打印列表(見1),再按字母順序顯示該列表(見2)。以特定順序顯示 列表后,我們進行核實,確認列表元素的排列順序與以前相同(見3)
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
4 Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']
注意,調用函數sorted()后,列表元素的排列順序并沒有變(見4)。如果你要按與字母順 序相反的順序顯示列表,也可向函數sorted()傳遞參數reverse=True。
注意 在并非所有的值都是小寫時,按字母順序排列列表要復雜些。決定排列順序時,有多種 解讀大寫字母的方式,要指定準確的排列順序,可能比我們這里所做的要復雜。然而, 大多數排序方式都基于本節介紹的知識。
3.3.3 倒著打印列表
要反轉列表元素的排列順序,可使用方法reverse()。假設汽車列表是按購買時間排列的, 可輕松地按相反的順序排列其中的汽車:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
注意,reverse()不是指按與字母順序相反的順序排列列表元素,而只是反轉列表元素的排 列順序:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
方法reverse()永久性地修改列表元素的排列順序,但可隨時恢復到原來的排列順序,為此 只需對列表再次調用reverse()即可。
3.3.4 確定列表的長度
使用函數len()可快速獲悉列表的長度。在下面的示例中,列表包含4個元素,因此其長度為4:
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4
在你需要完成如下任務時,len()很有用:確定還有多少個外星人未被射殺,需要管理多少 項可視化數據,網站有多少注冊用戶等。
注意 Python計算列表元素數時從1開始,因此確定列表長度時,你應該不會遇到差一錯誤。
3.4 使用列表時避免索引錯誤 剛開始使用列表時,經常會遇到一種錯誤。假設你有一個包含三個元素的列表,卻要求獲取 第四個元素:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3])
這將導致索引錯誤
Traceback (most recent call last):File "motorcycles.py", line 3, in <module>print(motorcycles[3])
IndexError: list index out of range
Python試圖向你提供位于索引3處的元素,但它搜索列表motorcycles時,卻發現索引3處沒有 元素。鑒于列表索引差一的特征,這種錯誤很常見。有些人從1開始數,因此以為第三個元素的 索引為3;但在Python中,第三個元素的索引為2,因為索引是從0開始的。
索引錯誤意味著Python無法理解你指定的索引。程序發生索引錯誤時,請嘗試將你指定的索 引減1,然后再次運行程序,看看結果是否正確。
別忘了,每當需要訪問最后一個列表元素時,都可使用索引-1。這在任何情況下都行之有效, 即便你最后一次訪問列表后,其長度發生了變化:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[-1])
索引-1總是返回最后一個列表元素,這里為值'suzuki':
'suzuki'
僅當列表為空時,這種訪問最后一個元素的方式才會導致錯誤:
motorcycles = []
print(motorcycles[-1])
列表motorcycles不包含任何元素,因此Python返回一條索引錯誤消息:
Traceback (most recent call last):File "motorcyles.py", line 3, in <module>print(motorcycles[-1])
IndexError: list index out of range
注意 發生索引錯誤卻找不到解決辦法時,請嘗試將列表或其長度打印出來。列表可能與你以 為的截然不同,在程序對其進行了動態處理時尤其如此。通過查看列表或其包含的元素 數,可幫助你找出這種邏輯錯誤。
3.5 小結
在本章中,你學習了:列表是什么以及如何使用其中的元素;如何定義列表以及如何增刪元 素;如何對列表進行永久性排序,以及如何為展示列表而進行臨時排序;如何確定列表的長度, 以及在使用列表時如何避免索引錯誤。 在第4章,你將學習如何以更高效的方式處理列表元素。通過使用為數不多的幾行代碼來遍 歷列表元素,你就能高效地處理它們,即便列表包含數千乃至數百萬個元素。
Python:核心知識點整理大全3-筆記-CSDN博客
Python:核心知識點整理大全2-筆記-CSDN博客
Python:核心知識點整理大全1-筆記-CSDN博客