官术网_书友最值得收藏!

4.3 List(列表)

List又叫列表,也是一個線性結構,它的表達形式是:

List的性質和Tuple是非常類似的,上述Tuple的操作都可以用在List上,但是List有一個最重要的特點就是元素可以修改,所以List的功能要比Tuple更加豐富。

由于List的查找和遍歷語法與Tuple是完全一致的,所以這里就不再贅述了,我們把主要精力放到List的特性上。

4.3.1 添加

之前已經提到了,List是可以修改的,因此可以在尾部添加一個元素,比如:

這段代碼會輸出:

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

這段代碼會輸出:

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代碼中應該善于使用列表推導式。

主站蜘蛛池模板: 鹿邑县| 大悟县| 哈巴河县| 红安县| 珠海市| 城固县| 海原县| 灌阳县| 成武县| 朝阳县| 晋江市| 武穴市| 大连市| 黄骅市| 罗平县| 长乐市| 平潭县| 玛多县| 淮阳县| 酉阳| 美姑县| 友谊县| 鲁甸县| 聊城市| 定州市| 隆子县| 濉溪县| 鄯善县| 安岳县| 科尔| 邳州市| 洛南县| 龙江县| 吴川市| 尉氏县| 韶山市| 迭部县| 任丘市| 健康| 新宁县| 乌拉特中旗|