Python中的list列表
阿新 • • 發佈:2021-07-14
列表list
- 一個佇列,一個排列整齊的隊伍
- 列表內的個體稱作元素,由若干元素組成列表
- 元素可以是任意物件
- 列表內元素有順序,可以索引
- 線性資料結構
- 使用[]表示
- 列表是可變的
列表list定義
- list()
- list(iterable)
- 列表不可一開始定義大小
lst = list()
lst = list(range(5))
lst = [1,3,5]
列表訪問
- 索引,可使用索引訪問
- 支援正索引和負索引
列表查詢
- Index(value, [start. [stop]])
- 通過值,從指定區間查詢元組內的元素是否匹配
- 匹配第一個返回索引
- 匹配不到,丟擲異常ValueError
- count(value)
- 返回列表中匹配value的次數
- 時間複雜度
- index和count方法都是O(n)
- 隨著列表資料規模增大, 效率降低
- len(tuple)
- 返回元素的個數
列表修改
- 索引訪問修改
- list[index] = value
- 索引不能超界
列表增加,插入
- append(object) —> None
- 列表尾部追加元素,返回None
- 返回None意味著在列表原處修改
- 時間複雜度是O(1)
- insert(index, object) —> None
- 在指定的索引index出插入元素object
- 原處修改
- 時間複雜度是O(n)
- 索引超越上界,尾部追加
- 索引超越下界,頭部追加
- extend(iteratable) —>None
- 將可迭代物件的元素追加進來
- 原處修改
- + —> list
- 連線操作,將兩個列表連線起來
- 產生新的列表,原列表不變
- 本質上呼叫的是_add_()方法
- * —> list
- 重複操作,將本列表元素重複n次,返回新列表
刪除元素
- remove(value) —>None
- 從左至右查詢第一個匹配value的值
- 就地修改
- 效率較差
- pop([inex]) —>None
- 不指定索引index,就從尾部彈出一個元素
- 指定索引index,就從索引出彈出一個元素
- 不指定索引效率為O(1),指定索引為列表最開始的位置,則效率很低
- clear() —>None
- 清楚列表所有元素,剩下一個空列表
列表反轉
- reversed() —>None
- 將列表元素反轉,返回None
- 就地修改
- 所有元素替換位置
列表排序
- sort(key=None, reverse=False). —>None
- 對列表元素進行排序,就地修改,預設升序
- reverse為True,則為降序
- key是一個函式,指定key如何排序
- Let.sort(key=functionname)
列表判斷
-
in
- 判斷物件是否在列表中
[3, 4] in [1, 2, [3, 4]]
列表複製
python中==和is的區別
- ==是拿值來比較
- is是拿id來比較
例:list1=list(range(5))
list2=list(range(5))
list1 == list2 返回 True
list1 is list2 返回False
-
copy() —>List
- shodow copy(淺拷貝)返回一個新的列表
In [3]: lst0 = [1,2,[3,4,5],6] # copy為淺拷貝,即按照lst0的內容生成lst5 In [4]: lst5 = list.copy(lst0) # 此時lst0和lst5的值一樣,所以==判斷為True In [5]: lst0 == lst5 Out[5]: True # 但是id不同,故is判斷為False In [6]: lst0 is lst5 Out[6]: False # 修改lst0[3]的值,觀察變化 In [7]: lst0[3] = 20 # 此時lst0和lst5的值不一樣,所以==判斷為False In [8]: lst0 == lst5 Out[8]: False # 可觀察lst0和lst5的值 In [9]: lst0 Out[9]: [1, 2, [3, 4, 5], 20] In [10]: lst5 Out[10]: [1, 2, [3, 4, 5], 6] # 將lst的值恢復 In [13]: lst0[3] = 6 In [14]: lst0 == lst5 Out[14]: True # 修改lst0中巢狀的列表的值,觀察變化 In [15]: lst0[2][2]= 20 # 雖然只修改了lst0,但lst0和lst5的值依舊相同,原因就在於copy為淺複製,對於巢狀的其他物件,只是做了物件的引用而已 In [16]: lst0 == lst5 Out[16]: True In [17]: lst0 Out[17]: [1, 2, [3, 4, 20], 6] In [18]: lst5 Out[18]: [1, 2, [3, 4, 20], 6]
-
deepcopy(old) —>List
- 深拷貝,無論有多少巢狀,得到的列表都和原來的無關。
- 使用時,要匯入copy
In [21]: import copy In [22]: lst8 = [1, 2, [3, 4, 20], 6] In [23]: newlist = copy.deepcopy(lst8) In [24]: lst8 == newlist Out[24]: True In [25]: lst8 is newlist Out[25]: False # 無論有多少層,都不會影響舊列表 In [26]: newlist[2][2] = 80 In [27]: lst8 == newlist Out[27]: False In [28]: lst8 Out[28]: [1, 2, [3, 4, 20], 6] In [29]: newlst In [30]: newlist Out[30]: [1, 2, [3, 4, 80], 6]