1. 程式人生 > 實用技巧 >聽說Python列表很難學,一個思維導圖就夠了

聽說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的內容新增到列表中