|  | python 沒有陣列(array),但有列表(list)可以取代,列表比陣列彈性,具有可變長度的特性。 list 是一種內建的數據類型,用於表示有序且可變的序列。List 中的元素可以是不同類型的數據,並且可以包含重複的元素。
 List 是一種非常靈活且常用的數據結構,你可以透過索引來訪問、修改、添加和刪除列表中的元素。
 下列是 lsit(列表)常見的運算:
 
 一維 List
 
 
  下列 import operator 可以有更多的運算宣告 指定 + * 註標
 
      
      | 運算式 | 結果 | 說明 |  | 宣告 x = [25, "abc", 't', 17.34]
 y=[]
 |  | list 可以複合資料型態。 可宣告空陣列。
 |  | 使用 range 宣告 x = list(range(3,12,2))
 print(x)
 | [3, 5, 7, 9, 11] | list 結合範圍(range)運算 (從 2 至 12,每數間格 2)
 |  | 指定運算 x = [2, 5, 8, 4]
 x[1] = -1
 x[3] = x[0] * 3 + 1
 print(x)
 | [2, -1, 8, 7] | 指定註標從 0 算起 指定 x 第 2 個元素為 -1
 指定第 4 個元素為第 1 個元素 3 倍 + 1。
 
 
 |  | 字元宣告方式x = list("abcd") print(x)
 | ["a", "b", "c", "d"] | 字串在 list 內會被自動分割成字元 |  | + 運算 x = [1, 2]
 y = [3, 4]
 z = x + y
 print(z)
 | [1, 2, 3, 4] | 集合合併 |  | * 運算 x = [1, 2]
 y = x * 2
 print(y)
 | [1, 2, 1, 2] | 重複 1 次 
 
 |  | 註標表示方式 x=[7,9,11,6]
 print(x[0])
 print(x[2])
 print(x[-1])
 | 7 11
 6
 | 註標從 0 算起。
 第 2 個位置是元素 11。
 負號表示倒數。
 |  
 共享 增加 附加 刪除 
 
      
      | 運算式 | 結果 | 說明 |  | 共享運算 x = [1,2,3]
 y = x
 y[1] = 7
 print(x)
 y = [4,5,6]
 print(x)
 | [1,7,3] 
 [1,7,3]
 | 注意: y=x 表示 y 與 x 共享 x 記憶體 改變 y 的元素就是改變 x
 
 y 得到新的 list 空間,此時與 x 不同。
 
 
 |  | 共享運算 import copy
 x = [1,2,3]
 y = copy.copy(x)
 y[1] = 7
 print(x)
 z = copy.deepcopy(x)
 z[1]=11
 print(x)
 | [1,7,3] 
 [1,7,3]
 | 注意:copy.copy 與 y = x 類似,改變 y 內元素,也會改變 x 
 使用 copy.deepcopy 改變 y 的元素不會改變 x。
 
 
 |  | 增加運算 x = [1,2]
 x=x+[3]
 print(x)
 x.extend([4,5])
 print(x)
 | [1,2,3] 
 [1,2,3,4,5]
 | 不可以 x=x+3。 
 
 
 
 |  | 附加運算 x = [1,2]
 x.append(3)
 print(x)
 x.append([4])
 print(x)
 | 
 [1,2,3]
 
 [1,2,3,[4]
 | x.append(3) 與 x.append([3])元素不一樣,要注意。 
 
 |  | 刪除運算 1: x = [9,7,6,8]
 del x[2]
 print(x)
 x = [7, 11, 9, 3, 5, 7, 3, 4, 3]
 x.remove(3)
 print(x)
 x = [item for item in x if item != 3]
 print(x)
 y = [7, 11]
 x = [item for item in x if item not in y]
 print(x)
 | 
 
 [9,7,8]
 
 [7,11,9,5,7,3,4,3]
 
 [7,11,9,5,7,4]
 
 
 [9,5,4]
 | 起始註標是 0,所以第 2 個是 6。 
 
 移除元素值是 3。
 
 移除 x 內,所有元素值是 3。
 
 
 移除 x 內,所有元素值與 y 內元素值相同的元素。
 
 
 |  | 刪除運算 2: 下列三個方法移除所有等於2的元素
 x = [1,2,3,2,4,7,2]
 x = list(filter((2).__ne__, x))
 print(x)
 x = [1,2,3,2,4,7,2]
 while 2 in x: x.remove(2)
 
 print(x)
 x = [1,2,3,2,4,7,2]
 for i in x:
 if(i==2): x.remove(2)
 
 print(x)
 | [1, 3, 4, 7] 
 
 
 [1, 3, 4, 7]
 
 
 
 
 [1, 3, 4, 7]
 | 方法一: 使用 filter 過濾掉元素值 2。
 
 方法二:
 使用迴圈 while 判斷元素值 2 在 x 中則移除。
 
 
 方法三:
 使用迴圈 for 與 if 判斷元素值 2 在 x 中則移除。
 
 
 
 
 |  
 切片、分割運算
 
    
    | 運算式 | 結果 | 說明 |  | x=[2,3,5,6,7,8,10,4] print(x[3:])
 print(x[:3])
 print(x[1:3])
 print(x[1:6:2])
 | [6, 7, 8, 10, 4] [2, 3, 5]
 [3, 5]
 [3, 6, 8]
 | 從第 3 個至最後
 從最前面到第 2 個
 從第 1 個到第 2 個。
 從第 1 個到第 5 個,每個間格 2
 |  | a, *b, c = [1, 2, 3, 4, 5] print(a)
 print(b)
 print(c)
 | 1 [2,3,4]
 5
 | list 分割運算,第 0 個元素給 a,最後給 c,中間都給 b。 注意上面的 a 與 c 是元素,而不是 list。
 |  | split 分割運算: x = "17 62 391"
 x.split()
 print(x)
 x = "17,62,391"
 x=x.split(",")
 print(x)
 | ["17", "62", "391"] 
 
 [17,62,391]
 | 字串分割,內定空白為分割點 
 
 自訂以逗點當分割點。
 
 
 |  
 max , min , len , count 函數運算
 
    
    | 運算式 | 結果 | 說明 |  | x=[2, 3, 2, 6, 5, 2, 9, 5] print(max(x))
 print(min(x))
 print(len(x))
 print(x.count(2))
 | 9 2
 8
 3
 | 求最大值 求最小值
 元素數量
 統計元素為 2 的數量
 |  
 索引、附加與堆疊推入/出運算
 
    
    | 運算式 | 結果 | 說明 |  | 索引運算 x = [2,5,4,7]
 print(x.index(4))
 | 
 2
 | 元素的索引值不是註標而是元素值。結果是註標值。 查出 x 列表元素值為 4 的位置?
 |  | 插入運算 x = [3,8,2,9]
 print(x.insert(2, 11))
 | [3,8,11,2,9] | 在位置 2 的地方插入 11 |  | 堆疊推出運算 x = [5, 8, 4, 9, 7]
 print(x.pop())
 print(x.pop(2))
 print(x)
 | 7 4
 [5, 8, 9]
 | pop內定運算是 pop(-1)。 pop 運算會刪除 list 內元素,因此空的 list,pop 運算會出錯。
 |  
 反轉、排序運算
 
    
    | 運算式 | 結果 | 說明 |  | 反轉運算 x = [2,3,4,7]
 x.reverse()
 print(x)
 | [7,4,3,2] | 線性逆向。 |  | 排序運算 x = [5,2,11,9,6,7,4,1]
 x.sort()
 print(x)
 x.sort(reverse=True)
 print(x)
 x = [3,-4,1,-3,5,7,-6]
 x.sort(key=abs)
 print(x)
 x = ["apple", "banana", "kiwi", "orange"]
 x.sort(key=len)
 print(x)
 def mod5(item):
 return item % 5
 
 x = [7,11,5,2,9,6,8,4,3,10]
 x.sort(key=mod5)
 print(x)
 | [1, 2, 4, 5, 6, 7, 9, 11] 
 [11, 9, 7, 6, 5, 4, 2, 1]
 
 
 [1, 3, -3, -4, 5, -6, 7]
 
 
 
 ["kiwi", "apple", "banana", "orange"]
 
 
 
 
 [5, 10, 11, 6, 7, 2, 8, 3, 9, 4]
 | 內定由小而大排序 
 由大而小排序
 
 
 絕對值排序
 
 
 
 字串長度排序
 
 自訂函數排序(除5取餘數)
 
 
 
 
 
 
 |  
 前面共用程式
 import operator
 a=[1,2,3]
 b=[2,1]
 c=[1,2,3]
 
 
  print("1.",operator.lt(a, b)) #小於print("11.",operator.le(a, c)) #小於等於print("4.",operator.ne(a, b)) #不相等print("3.",operator.eq(a, b)) #相等print("51.",operator.ge(a, c))#大於等於print("6.",operator.gt(b, a))#大於
 二維 List
 
 在 Python 中,2 維列表(也稱為嵌套列表)是一個包含其他列表的列表。
 每個內部列表都可以被視為 2D 列表的一行。以下是一些 2D 列表的基本操作:
 
 宣告 指定 增加 刪除 複製
 
 
    
    | 運算式 | 結果 | 說明 |  | 宣告 x=[
 [1, 2, 3] ,
 [4, 5, 6]
 ]
 print(x)
 x=[ [0 for _ in range(4)] for _ in range(3)]
 print(x)
 for item in x: print(item)
 x=[ [i+1+j*3 for i in range(3)] for j in range(4)]
 print(x)
 | 
 [[1, 2, 3], [4, 5, 6]]
 
 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
 
 
 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
 | 宣告一個 2X3 的 list 
 
 
 宣告一個 3X4 的 list,且每項初值為0
 
 
 宣告一個 4X3 的 list,且各項初值有序。
 
 
 |  | 指定運算 x=[
 [1,2,3],
 [4,5,6],
 [7,8,9]
 ]
 print(x[1])
 print(x[2][0])
 x[1]=[9,9,9]
 x[0][1]=7
 print(x)
 | [4, 5, 6] 7
 
 
 [[1, 7, 3], [9, 9, 9], [7, 8, 9]]
 
 | 指定第 2 列。(從 0 算起 1 為 2) 指定第三列第一行
 指定第 2 列
 指定第 1 列第 2 行
 
 
 |  | 新增運算 x =[ [1,2,3] ]
 x.append([4,5,6])
 print(x)
 | [[1, 2, 3], [4, 5, 6]] | 宣告 2 維 list 增加一組 list。
 
 |  | 刪除運算 x =[ [1,2,3],[4,5,6] ]
 del x[1]
 print(x)
 | [[1, 2, 3]] | 宣告 2 維 list 刪除第 2 列 list。
 
 
 |  | 複製運算 import copy
 x = [[1, 2, 3], [4, 5, 6]]
 y = copy.deepcopy(x)
 print(x)
 print(y)
 |  |  |  
 
 
 
 |