一、列表list
- 一個隊列,一個排列整齊的隊伍,列表內的個體稱作元素,由若干元素組成的列表,元素可以是任意對象(數字,字符串,對象,列表等)
- 列表內元素有順序,可以使用索引,線性的數據結構,使用[]表示,列表是可變的
- 列表list、鏈表、queue、stack的差異
二、列表list定義和初始化
- list() 定義一個空列表 list(iterable) 初始化一個可迭代的列表 列表不能一開始就定義大小
- 列表定義方式:lst = list()或lst = []
- 舉例: lst = [2,6,9,'ab'] lst = list(range(5))
三、列表索引訪問
- 索引也叫下標
- 正索引:從左至右,從0開始為列表中每一個元素編號
- 負索引:從右至左,從-1開始為列表中每一個元素編號
- 正負索引不可以越界,否則引發異常IndexError,為了理解方便,可以認為列表是從左至右排列的,左邊是頭部,右邊是尾部,左邊是下界,右邊是上界
- 列表通過索引訪問方式:list[index],index就是索引,使用中括號訪問
四、列表查詢
1、list.index(value,[start,[stop])
- 通過值value,從指定區間查找列表內的元素是否匹配,匹配第一個就立即返回索引,匹配不到,拋出異常ValueError
- 舉例:
- >>> lst = [2,6,9,'ab']
>>> lst.index(2)
0
>>> lst.index(6,0,3)
1
2、list.count(value)
- 返回列表中匹配value的次數
- 時間復雜度
- index和count方法都是O(n)
- 隨着列表數據規模的增大而效率下降
- len(lst) 返回列表元素的個數
- 舉例:
- >>> lst = lst = [2,6,9,9,9,'ab']
>>> lst
[2, 6, 9, 9, 9, 'ab']
>>> lst.count(9)
3
五、列表元素修改
- list[index] = value,索引不要超界
六、列表增加、插入元素
- list.append(object):列表尾部追加元素,返回None,返回None就意味着沒有新的列表產生,就地修改,時間復雜度是O(1)
- list.insert(index,object) 返回None,返回None就意味着沒有新的列表產生,就地修改,時間復雜度是O(1)
- 插入索引越界:超越上界,尾部追加,超越下界,頭部追加 list.extend(iterable) 返回None,將可迭代對象元素追加進來,返回None,就地修改
- list+list:連接操作,將兩個列表連接起來,產生新的列表,原列表不變,本質上調用的是__add__()方法
- list*list:重復操作,將本列表元素重復n次,返回新的列表
七、列表刪除元素
- list.remove(value):返回None,從左至右查找第一個匹配的value值,移除該元素,返回None,就地修改
- list.pop([index]):不指定索引就從列表尾部彈出一個元素,指定索引,從索引出彈出一個元素,索引超界拋出IndexError錯誤
- list.clear():清除列表所有元素,返回None,剩下一個空列表
八、列表其他操作
- list.reversed(): 將列表元素反轉,返回None,就地修改
- list.sort(key=None,reverse=False): 對列表元素進行排序,就地修改,默認升序,reverse=True降序,key是一個函數,指定key如何排序
- in 是否在 [3,4] in [1,2,[3,4]]
九、列表復制
1、影子拷貝,也叫淺拷貝:list.copy() ,遇到引用類型,只是復制了一個引用而已
- 測試 lst1 = list(range(4))和 lst2 = list(range(4))是否相等?
- >>> lst1 = list(range(4))
>>> lst1
[0, 1, 2, 3]
>>> lst2 = list(range(4))
>>> lst2
[0, 1, 2, 3]
>>> lst1 == lst2
True - 以上測試說明,lst1和 lst2相等,兩個列表指向的是同一個引用
- 測試1:
- >>> lst1 = list(range(4))
>>> lst2 = lst1.copy()
>>> lst1
[0, 1, 2, 3]
>>> lst2
[0, 1, 2, 3]
>>> lst2[2] = 10
>>> lst2
[0, 1, 10, 3]
>>> lst1
[0, 1, 2, 3]
>>> lst1 == lst2
False
2、深拷貝:copy模塊,提供了deepcopy
- 舉例1:使用淺拷貝
- >>> lst1 = [1,[2,3],4]
>>> lst2 = lst1.copy()
>>> lst2
[1, [2, 3], 4]
>>> lst2[1][1] = 20
>>> lst2
[1, [2, 20], 4]
>>> lst1
[1, [2, 20], 4]
>>> lst1 == lst2
True - >>> lst1 = [1,[2,3],4]
>>> lst1
[1, [2, 3], 4]
>>> import copy
>>> lst2 = copy.deepcopy(lst1)
>>> lst2
[1, [2, 3], 4]
>>> lst2[1][1] = 20
>>> lst2
[1, [2, 20], 4]
>>> lst1 == lst2
False