四、Python基本資料型別四:列表型別
·列表是Python中內建有序、可變序列,列表的所有元素放在一對中括號“[]”中,並使用逗號分隔開
·當列表元素增加或刪除時,列表物件自動進行擴充套件或收縮記憶體,保證元素之間沒有縫隙
·在Python中,一個列表中的資料型別可以各不相同,可以同時分別為整數、實數、字串等基本型別,甚至是列表、元組、字典、集合以及其他自定義型別的物件
1、列表的建立與刪除
·使用方括號[]直接建立
list_a = ["String", 1, 'a', [1, 'b', 3]] list_b = [] #建立空列表 print(list_a, '\n', list_b) ''' 輸出結果: ['String', 1, 'a', [1, 'b', 3]] [] '''
·使用list()函式建立
list_a = list(range(1, 26, 3)) list_b = list((1, 'a', "abc")) list_c = list() #建立空列表 list_d = list('Hello World') print(list_a, '\n', list_b, '\n', list_c, '\n', list_d) ''' 輸出結果: [1, 4, 7, 10, 13, 16, 19, 22, 25] [1, 'a', 'abc'] [] ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']'''
·使用del命令刪除整個列表,如果列表物件所指向的值不再有其他物件指向,Python將同時刪除該值。
del list_a list_a ''' 輸出結果: Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> list_a NameError: name 'list_a' is not defined '''
2、列表元素的增加
(1)使用‘+’運算子
list_a = [1, 2, 3] list_a = list_a + [5] print(list_a, '\n', list_b)''' 輸出結果:
[1, 2, 3]
[1, 2, 3, 5]
'''
·該方法建立了一個新列表,並將原列表中的元素和新元素依次複製到新列表的記憶體,由於涉及元素的複製,該操作速度較慢
(2)使用append(a)方法
list_a = list('Hello') list_a.append('!') list_a ''' 輸出結果: ['H', 'e', 'l', 'l', 'o', '!'] '''
·append()實現的是在特定的列表最後新增一個元素,並且一次只能在列表最後新增一個元素。該方法為原地修改,即直接修改原列表,不產生新的列表,速度較快
(3)使用extend(a, b…)方法
list_a = [1, 2, 3] list_a.extend('a', 4, 'abc') ''' Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> list_a.extend('a', 4, 'abc') TypeError: extend() takes exactly one argument (3 given) ''' list_a.extend(['a', 4, 'abc']) list_a ''' 輸出結果: [1, 2, 3, 'a', 4, 'abc'] '''
·extend()實現的是對於特定列表的擴充套件和增長,可以在列表的最後一次性新增多個元素,該方法為原地修改,不產生新的列表
(4)使用insert(a, b)方法
list_a = ['a', 1, 2, 'b'] list_a.insert(3, 3) list_a ''' 輸出結果: ['a', 1, 2, 3, 'b'] '''
·insert(a, b)實現的是在列表的指定位置a處插入元素b,但由於列表的自動記憶體管理功能,insert()方法會引起插入位置之後所有元素的移動,這會影響處理速度
(5)使用‘*’方法
list_a = [[1, 2, 3] * 2] * 3 list_a ''' [[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]] ''' list_a[0][0] = 'a' list_a ''' [['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3]] '''
·當使用*運算子將包含列表的列表重複並建立新列表時,並不是複製子列表值,而是複製已有元素的引用。因此,當修改其中一個值時,相應的引用也會被修改
3、列表元素的刪除
(1)使用del m[n]方法
list_a = [1, 2, 3, 4] del list_a[1] list_a #[1, 3, 4]
·刪除列表m指定位置n上的元素
(2)使用pop(n)方法
list_a = [1, 2, 3, 4] list_a.pop() #4 list_a.pop(0) #1 list_a #[2, 3]
·刪除並返回列表指定位置(預設為最後一個)上的元素,如果給定的索引超出了列表的範圍則丟擲異常
(3)使用remove(a)方法
list_a = ['1', 'a', 'b', 1, 2] list_a.remove('1') list_a #['a', 'b', 1, 2] list_a.remove('1') ''' Traceback (most recent call last): File "<pyshell#58>", line 1, in <module> list_a.remove('1') ValueError: list.remove(x): x not in list '''
·刪除首次出現的指定元素,如果列表中不存在要刪除的元素,則丟擲異常
4、列表元素的訪問
(1)使用下標直接訪問,如果指定下標不存在,則丟擲異常
(2)使用index()方法獲取指定元素首次出現的下標,若列表物件中不存在指定元素,則丟擲異常
list_a = [[1, 2, 3] * 2] * 3 list_a.index(3) ''' Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> list_a.index(3) ValueError: 3 is not in list ''' list_a = [1, 2, 3, 4, 'a', 'b'] list_a.index(3) #2
(3)使用count()方法統計指定元素在列表物件中出現的次數
list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3] list_a.count(2) #3 list_a.count(0) #0
(4)使用in關鍵字來判斷一個值是否存在於列表中,返回結果為“True”或“False”
list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3] 4 in list_a #False 3 in list_a #True 0 not in list_a #True
5、列表切片
(1)列表切片就是指將列表裡面的一些列元素(不僅僅是某一個元素)進行獲取或者得到
(2)M = N[A:B:C]表示將N列表裡從索引號位置為A開始的元素到B-1處且步長為C的元素的列表獲取賦給M
list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3] list_b = list_a[0:6:2] list_b #[1, 3, 3]
(3)切片操作不會因為下標越界而丟擲異常,而是簡單地在列表尾部截斷或者返回一個空列表,程式碼具有更強的健壯性
list_a = [1, 2, 3] list_b = list_a[2:6] list_b #[3]
(4)使用切片修改列表元素
·在尾部追加元素
list_a = [1, 2, 3] list_a[len(list_a) : ] = [0] list_a #[1, 2, 3, 0]
·替換元素
list_a = [1, 2, 3, 4, 5, 6] list_a[1:4] = ['a', 'b', 'c'] list_a #[1, 'a', 'b', 'c', 5, 6]
·刪除元素
list_a = [1, 2, 3, 4, 5, 6] list_a[1:5] = [] list_a #[1, 6]
·與del結合刪除元素
list_a = [1, 2, 3, 4, 5, 6] del list_a[1:5] list_a #[1, 6]
(5)淺拷貝
(5)深拷貝
6、列表推導式
aList = [x*x for x in range(10)]
相當於
>>> aList = []
>>> for x in range(10):
aList.append(x*x)
也相當於
aList = list(map(lambda x: x*x, range(10)))
7、列表函式&方法
序號 |
函式 |
1 |
cmp(list1, list2) |
2 |
len(list) |
3 |
max(list) |
4 |
min(list) |
5 |
list(seq) |
6 |
list.append(obj) |
7 |
list.count(obj) |
8 |
list.extend(seq) |
9 |
list.index(obj) |
10 |
list.insert(index, obj) |
11 |
list.pop([index=-1]) |
12 |
list.remove(obj) |
13 |
list.reverse() |
14 |