聽說Python列表很難學,一個思維導圖就夠了
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲 作者:鹹魚學Python
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )
列表
列表(List)是Python中非常重要的內建資料型別。列表由一系列元素組成,所有的元組被包含在一對方括號中。列表被建立將後,可以執行新增、刪除、修改操作。
列表中可包含任意的Python資料資訊,如字串、數字、列表、元組等。
1.1 列表介紹
列表是有序集合,沒有固定大小,能夠儲存任意數量任意型別的 Python 物件,語法為 [元素1, 元素2, …, 元素n]。
【例子】
>>> list = [ “a”, “b”, “c” ],定義字元列表。 >>> list = [ 1, 2, 3, 4 ],定義數字列表。 >>> list = [ [1,2,3,4], ["a","b","c"] ],定義列表的列表。 >>> list = [ (1,2,3,4), ("a","b","c") ],定義元組列表。 >>> list((1,2))把一個元組轉換成一個列表[1,2], list('test')可把 字串轉換成['t','e','s','t']列表
1.2 列表操作
列表的所有操作如下表所示:
1.2.1 列表指令碼操作符
列表對 + 和 * 的操作符與字串相似。+ 號用於組合列表,* 號用於重複列表。
1.2.2 列表切片
切片操作(slice)可以從一個列表中獲取子列表(列表的一部分)。我們使用一對方括號、起始偏移量start、終止偏移量end 以及可選的步長step 來定義一個分片。
格式:[start: end: step]
• [:] 提取從開頭(預設位置0)到結尾(預設位置-1)的整個字串
• [start:] 從start 提取到結尾
• [:end] 從開頭提取到end - 1
• [start: end] 從start 提取到end - 1
• [start: end: step] 從start 提取到end - 1,每step 個字元提取一個
• 左側第一個字元的位置/偏移量為0,右側最後一個字元的位置/偏移量為-1
【例子】
>>> list = [1, 2, 3, 4, 5, 6, 7] >>> list[1:] #列出索引1以後的---------[2, 3, 4, 5, 6, 7] >>> list[:-1] #列出索引-1之前的-------[1, 2, 3, 4, 5, 6] >>> list[1:3] #列出索引1到3之間的-----[2] >>> list[::-1]#[7, 6, 5, 4, 3, 2, 1] #形成reverse函式的效果:
1.2.3 淺拷貝和深拷貝
- 淺拷貝:淺拷貝意味著構造一個新的集合物件,然後用原始物件中找到的子物件的引用來填充它。從本質上講,淺層的複製只有一層的深度。複製過程不會遞迴,因此不會建立子物件本身的副本。
- 深拷貝:深拷貝使複製過程遞迴。這意味著首先構造一個新的集合物件,然後遞迴地用在原始物件中找到的子物件的副本填充它。以這種方式複製一個物件,遍歷整個物件樹,以建立原始物件及其所有子物件的完全獨立的克隆。
A. 賦值引用
a = {1:[1,2,3]} b = a print(id(a) == id(b))
輸出:
True
賦值引用,a 和 b 都指向同一個物件。
B. 淺拷貝
a = {1:[1,2,3]} b = a.copy() print(id(a) == id(b)) print(id(a[1]) == id(b[1]))
輸出:
False
True
a 和 b 是一個獨立的物件,但他們的子物件還是指向統一物件(是引用)。
C. 深度拷貝
import copy a = {1:[1,2,3]} b = copy.deepcopy(a) print(id(a) == id(b)) print(id(a[1]) == id(b[1])) print(id(a[1][0]) == id(b[1][0]))
輸出:
False
False
True
a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。對於a[1][0]和b[1][0]還是對於物件1的引用,並沒有重新新建一個物件,這符合python的儲存機制。
>>> list1 = [3, 5, 1, 6, 9] >>> lsit2 = [3, 5, 1, 6, 9] >>> a = list1.sort() #永久性排序,就是這個列表就變了 >>> print(a, l1) # None [1, 3, 5, 6, 9] >>> b =sorted(list1) #臨時性排序,就是可以賦值某個變數 >>> print(b, list1) # [1, 3, 5, 6, 9] [3, 5, 1, 6, 9] >>> c = list2.reverse() >>> print(c, list2) # None [9, 6, 1, 5, 3]
------ list中的append和extend的區別:
- list.append(object) 向列表中新增一個物件object
- list.extend(sequence) 把一個序列seq的內容新增到列表中