|
python 沒有陣列(array),但有列表(list)可以取代,列表比陣列彈性,具有可變長度的特性。
list 是一種內建的數據類型,用於表示有序且可變的序列。List 中的元素可以是不同類型的數據,並且可以包含重複的元素。 List 是一種非常靈活且常用的數據結構,你可以透過索引來訪問、修改、添加和刪除列表中的元素。
下列是 lsit(列表)常見的運算:
一維 List
- 宣告 指定 + * 註標
運算式 | 結果 | 說明 |
宣告 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 可以有更多的運算
前面共用程式
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) | | |
|