書名: Python基礎及應用作者名: 呂云翔 姚澤良 張揚等編著本章字數: 1311字更新時間: 2021-10-27 15:16:31
4.3 List(列表)
List又叫列表,也是一個線性結構,它的表達形式是:

List的性質和Tuple是非常類似的,上述Tuple的操作都可以用在List上,但是List有一個最重要的特點就是元素可以修改,所以List的功能要比Tuple更加豐富。
由于List的查找和遍歷語法與Tuple是完全一致的,所以這里就不再贅述了,我們把主要精力放到List的特性上。
4.3.1 添加
之前已經提到了,List是可以修改的,因此可以在尾部添加一個元素,比如:

這段代碼會輸出:

append方法的作用是在List后面追加一個元素,類似地,還有extend和insert可以用于添加元素,比如:

這段代碼會輸出:

extend接收一個參數,內容為要合并進這個list的一個可迭代對象,所以這里可以傳入一個List或者Tuple。
insert接收兩個參數,分別是下標和被插入的對象,可以在指定下標位置插入指定對象。
4.3.2 刪除
由于List元素是可以修改的,因此刪除也是允許的,List刪除元素有三種方法。
1.del操作符
del是一個Python內建的一元操作符,只有一個參數是被刪除的對象,比如:

這段代碼會輸出:

del一般用來刪除指定位置的元素。
2.pop方法
pop方法沒有參數,默認刪除最后一個元素,比如:

這段代碼會輸出:

3.remove方法
remove方法接收一個參數,為被刪除的對象,比如:

這段代碼會輸出:

同時也可以看出remove是從前往后查找,刪除遇到第一個相等的元素。
4.3.3 修改
List可以在原位進行修改,直接用下標訪問就可以,比如:

這段代碼會輸出:

這樣第三個元素就被修改了。
還記得我們剛剛學習的切片操作符嗎?對于List來說可以一次修改一段值,比如:

這段代碼會輸出:

也可以等間隔賦值:

這段代碼會輸出:

很多時候我們希望在遍歷過程中修改值,那么就有了新的問題,如果刪除了一個值,那么之后會不會遍歷到已刪除的值?而如果在尾部添加了一個值,那么之后新添加的值會不會被遍歷到?在Python中遍歷List時修改值是完全安全的,不會遍歷到刪除的值并且新添加的值會正常遍歷,我們看一個例子:


在for循環中建立的循環變量item只是原對象list1中元素的一個拷貝,所以直接修改item不會對list1造成任何影響,我們依舊需要用下標或者List的方法來修改list1的值。
之前我們都是通過while來完成跟下標有關的循環的,這里介紹如何用for來進行下標相關的循環,那就是利用enumerate返回一個迭代器,這個迭代器可以同時生成下標和對應的值用于遍歷。當然由于還沒有講到函數和面向對象的相關知識,這里只要有個印象即可,能模仿使用更好。
4.3.4 排序和翻轉
很多時候,我們希望數據是有序的,而List提供了sort方法用于排序和reverse方法用于翻轉,比如:

這段代碼會輸出:

第一個reverse方法的作用就是將List前后翻轉,第二個sort方法是將元素從小到大排列,第三個sort加了一個reversed=True的參數,所以它會從大到小排列元素。
4.3.5 推導式
列表推導式是一種可以快速生成List的方法。
比如想生成一個含有0~100中所有偶數的列表可能會這么寫:

但是如果使用列表推導式,只用一行即可:

怎么理解這個語法呢?這里的語法很像經典集合論中對集合的定義,其中最開始的i是代表元素,而后面的for i in range(101)說明了這個元素的取值范圍,最后的一個if是限制條件。
同時代表元素還可以做一些簡單的運算,比如:

這里輸出的結果是:

這里依靠列表推導式就快速生成了100以內的完全平方數。
另外值得一提的是,列表推導式不僅簡潔、可讀性高,更關鍵的是相比之前的循環生成,列表推導式的效率要高得多,因此在寫Python代碼中應該善于使用列表推導式。
- 多媒體CAI課件設計與制作導論(第二版)
- Go Web編程
- Learning Java Functional Programming
- Learn TypeScript 3 by Building Web Applications
- Java應用與實戰
- Flask Blueprints
- C++ Builder 6.0下OpenGL編程技術
- Java程序設計與計算思維
- INSTANT Sencha Touch
- Android 7編程入門經典:使用Android Studio 2(第4版)
- 深度學習:算法入門與Keras編程實踐
- SSM輕量級框架應用實戰
- Serverless computing in Azure with .NET
- 現代C++編程實戰:132個核心技巧示例(原書第2版)
- TMS320LF240x芯片原理、設計及應用