1. 程式人生 > >零基礎學習 Python 之列表

零基礎學習 Python 之列表

列表定義

之前的文章裡我們已經講過了數字和字串,它們是兩種很基本的物件,今天要學的 list 也是一種物件,它在 Python 中具有非常強大的功能。

在 Python 中,列表用一對方括號 -- [] 表示,在方括號裡你可以數字,字串也可以是其他物件,甚至可以是多種不同的物件。除此以外,列表中元素的個數可以無限大,當然這是理想狀態,我們總還是要看硬體裝置的臉色行事。

>>> a = []
>>> a
[]
>>> b = ['1',2,'abcd']
>>> b
['1', 2, 'abcd']
>>> c = [1,'asd'
,[1,2,3]] >>> c [1, 'asd', [1, 2, 3]] 複製程式碼

索引和切片

還記得什麼是索引和切片嗎?如果忘記了,請回頭去看這篇文章 -- 零基礎學習 Python 之字串 。

列表和字串一樣,都是序列,列表裡的元素也是有順序的,所以也是有索引和切片的,看看下面的例子就明白了。

>>> a = [1,'2','rocky']
>>> a[0]
1
>>> a[1]
'2'
>>> a[:3]
[1, '2', 'rocky']
>>> a[1:3]
['2', 'rocky'
] >>> a[2][0:3] 'roc' 複製程式碼

由上面的例子我們可以看出來,其實列表裡的索引和序列與字串裡的是一樣的,我們完全可以把之前在字串中的理解照搬過來,所以列表也可以從右向左編號,依次是 -1,-2,-3...但是如果要是切片的話,這裡要注意了,請看下面的例子:

>>> str = ['abc','bcd','123']
>>> str[-3:-1]
['abc', 'bcd']
>>> str[-1:-3]
[]
複製程式碼

看明白了嗎?序列都是從左向右排,不管你的下標是正的還是負的都是這個規律。

當然了序列裡還可以跳步,其實它的完整的寫法是 list[start:end:step],預設step = 1 。

>>> str = [1,2,3,4,5,6,7,8]
>>> str[::2]
[1, 3, 5, 7]
複製程式碼

在這裡再多補充一點, step 也是可以等於負數的,str[::-1] 表示的是從列表的右邊看這個列表,然後按照 step = 1 去列表中的元素,當然 step 還可以等於 -2,-3,具體是多少看到時候看心情。

>>> str = [1,2,3,4,5,6,7,8]
>>> str[::-1]
[8, 7, 6, 5, 4, 3, 2, 1]
>>> str[::-2]
[8, 6, 4, 2]
複製程式碼

列表操作

列表是序列,但凡是序列都有基本的幾種操作,比如在字串的時候我們就講過它的幾種操作,列表的基本操作和字串的差不多,在這基礎上,列表還有其獨特的操作,對於基本操作,比如連線操作等我在這裡就不講了,忘記的可以求看前面的文章,我在這裡只是說一下列表獨特的操作。

列表與字串一個很大的不同是,字串不可修改,但是列表可以修改。

>>> str = ['python','c++','java']
>>> str[0] = 'c#'
>>> str
['c#', 'c++', 'java']
>>> name = 'rocky'
>>> name[0] = 'R'
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
複製程式碼

其次,除了可以修改元素以外,列表還可以繼續給自己新增元素,但是不是說列表隨便可以給自己加戲,必須要用 append() 方法向列表中追加元素,追加到末尾。

>>> str = ['python','c++','java']
>>> str[3] = 'c#'
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> str.append('c#')
>>> str
['python', 'c++', 'java', 'c#']
複製程式碼

常用列表函式

作為 Python 中出了名的苦哈哈,它必然有很多的函式去實現功能,感興趣的朋友們可以用 dir(list) 檢視,我在這裡主要說一下那些經常用到的。

1.append:這個其實我們在昨天的文章 ( 零基礎學習 Python 之列表 ( 一 ) )中說過,它執行的結果就是將某個元素加入到一個一直列表的最右邊。

>>> str = [1,2,3,4,5]
>>> str.append(6)
>>> str
[1, 2, 3, 4, 5, 6]
複製程式碼

2.extend:官方的說法是從可迭代的物件那裡獲取元素,將它們追加到已知的列表中,從而達到擴充的目的,其實就是能夠將兩個列表合併。

>>> str = [1,2,3,4,5]
>>> str1 = ['abc','def']
>>> str.extend(str1)
>>> str
[1, 2, 3, 4, 5, 'abc', 'def']
複製程式碼

3.count:這是一個可以幫我們搞清楚列表中的元素重複出現次數的方法。

>>> a = [1,2,3,4,5,1,2,3]
>>> a.count(1)
2
>>> a.append('a')
>>> a.append('a')
>>> a
[1, 2, 3, 4, 5, 1, 2, 3, 'a', 'a']
>>> a.count('a')
2
>>> a.count('b')
0
複製程式碼

4.index:該函式能夠查到你想查的函式在列表中第一次出現的位置,比起之前的文章我們說的索引,這個才是真真正正的索引。

>>> a = [1,2,3,4,'abc','def']
>>> a.index(2)
1
複製程式碼

5.insert:這個厲害了,之前在 1 和 2 中我們說的 append 和 extend 只是能在列表的最右新增元素,而 insert 可以在列表的任意位置增加一個元素。

>>> a = [1,2,3,4,'abc','def']
>>> a.insert(0,'rocky')
>>> a
['rocky', 1, 2, 3, 4, 'abc', 'def']
複製程式碼

6.remove & pop:列表中的元素不光能夠增加元素,還可以刪除元素, remove() 和 pop() 就是列表用來刪除元素的函式。romove() 函式刪除元素首先這個元素必須要存在,其次它是在原列表上進行刪除,當列表中有重複元素的時候,只刪除第 1 個。

>>> a = [1,2,3,4,1]
>>> a.remove(1)
>>> a
[2, 3, 4, 1]
>>> a.remove('a')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
複製程式碼

pop() 函式如果填寫刪除元素的索引的話,那麼就是刪除該元素,如果沒有制定刪除元素的索引,則刪除列表的最後一個元素,並且 pop() 函式有返回值,返回的就是刪除的那個元素。

>>> a = [1,2,3,4,1]
>>> a.pop(1)
2
>>> a.pop()
1
>>> a
[1, 3, 4]
複製程式碼

7.reverse:這個函式很簡單,就是直接把列表的元素順序反過來。

>>> a = [1,2,3,4,1]
>>> a.reverse()
>>> a
[1, 4, 3, 2, 1]
複製程式碼

8.sort:這個函式是對列表進行排序,預設是遞增排序,通過改變預設引數 reverse 的值可以實現遞減排序。

>>> a = ['c','d','a','k']
>>> a.sort()
>>> a
['a', 'c', 'd', 'k']
>>> a.sort(reverse = True)
>>> a
['k', 'd', 'c', 'a']
複製程式碼

比較列表 & 字串

列表和字串這兩種物件型別有很多相似的地方,也有很大的區別,在這裡簡單比較一下,也算是對前面所學的一個複習。

相同點:

1.兩者都是序列型別,都可以從左向右(從左向右),依次用 0,1,2...(-1,-2,-3...)表示,通過這樣的方式建立索引,同樣可以用切片的方法得到 一個或多個元素。

2.對於序列的基本操作來說,二者都適用,比如連線操作等,還有像 len() 這一類的函式也都是適用的。

不同點:

1.字串和列表的最大區別就是:列表的可變的,但是字串是不可變的。我們在上面講到的列表函式,諸如 append(),insert(),pop() 等對字串來說都是不適用的。

2.元素的包裹性,這是我自己想的一個詞,可能不太貼切。字串裡的每個元素都只是字元,而列表裡的元素可以是其它任何的諸如數字,字串,列表等物件型別。

到這裡,列表差不多就寫完了,列表雖然是苦哈哈,但先讓它做這些事情把,顯得我們比較仁義點。。

寫在最後

更多內容,歡迎關注公眾號「Python空間」,期待和你的交流。

在這裡插入圖片描述