python 沒有陣列(array),但有列表(list)可以取代,列表比陣列彈性,具有可變長度的特性。
list 是一種內建的數據類型,用於表示有序且可變的序列。List 中的元素可以是不同類型的數據,並且可以包含重複的元素。
List 是一種非常靈活且常用的數據結構,你可以透過索引來訪問、修改、添加和刪除列表中的元素。
下列是 lsit(列表)常見的運算:

一維 List
  1. 宣告 指定 + * 註標

  2. 運算式結果說明
    宣告
    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。
    負號表示倒數。

  3. 共享 增加 附加 刪除

  4. 運算式結果說明
    共享運算
    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 中則移除。




  5. 切片、分割運算

  6. 運算式結果說明
    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]
    字串分割,內定空白為分割點


    自訂以逗點當分割點。


  7. max , min , len , count 函數運算

  8. 運算式結果說明
    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 的數量

  9. 索引、附加與堆疊推入/出運算

  10. 運算式結果說明
    索引運算
    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 運算會出錯。

  11. 反轉、排序運算

  12. 運算式結果說明
    反轉運算
    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 可以有更多的運算
前面共用程式
import operator
a=[1,2,3]
b=[2,1]
c=[1,2,3]
  1. print("1.",operator.lt(a, b)) #小於
  2. print("11.",operator.le(a, c)) #小於等於
  3. print("4.",operator.ne(a, b)) #不相等
  4. print("3.",operator.eq(a, b)) #相等
  5. print("51.",operator.ge(a, c))#大於等於
  6. 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)