# 資料結構-1 --- # 什麼是資料結構? ---- 資料結構是可以儲存值的容器 我們最常用的有list、set、dict、tuple。 要注意True和1是一樣的,False和0也是。 這對某些操作有影響 --- # list串列 [講義](https://hackmd.io/@ts-boring/S1fIOlOxke#/4) ---- list就是之前講的陣列。 能以a=[x,y,...]宣告。 list內可以存種類型的東西, 也可以存資料結構 ---- ## 操作 增加、刪除 ```python a = [1, 2, 3, 4] a.append(5) # [1, 2, 3, 4, 5] # 在最後加上5 a.insert(10, 2) # [1, 2, 10, 3, 4, 5] # 插入10使得a[2]=10 del a[1] # [1, 10, 3, 4, 5] # 由位置移除值,也可用陣列分割移除大塊 a.remove(4) # [1, 10, 3, 5] # 由值移除第一個遇到的值 b = a.pop(2) # b=3, a=[1, 10, 5] # 由位置取得並刪除值 ``` ---- ## 操作 陣列連結 ```python a = ['a1', 'a2', 'a3'] b = ['b1', 'b2'] c = a+b #c先加入a,後面再接b # c = ['a1', 'a2', 'a3', 'b1', 'b2'] a.extend(c) #在a後面接c # a = ['a1', 'a2', 'a3', 'a1', 'a2', 'a3', 'b1', 'b2'] ``` ---- ## 操作 迴圈陣列、陣列分割 ```python a = [x for x in range(1,5)] # a = [1, 2, 3, 4] b = a[1:2] # b = [2, 3] c = a[1::-1] # c = [2, 1] ``` ---- ## 操作 字串分裂 ```python str = 'ab. .. c' a = str.split('.') # 以'.'分開字串 # a = ['ab', ' ', '', ' c', ''] b = str.split() # 沒寫就是以空格分開,不過這時連著的空格中間不分開 # b = ['ab.', '..', 'c'] c = list(str) # c = ['a', 'b', '.', ' ', ' ', '.', '.', ' ', 'c'] 每個都分開 ``` --- # set集合 ---- ## 性質 類似list,但是是用大括號{}包起來 但set內部的元素不會重複 且順序對於set並不重要 ---- ## 操作 ### 宣告、增加、刪減 ```python a = {1, True, 2, 3} # {1, 2, 3} a.add(4) # {1, 2, 3, 4} a.remove(1) # {2, 3, 4} a.discad(3) # {2, 4} b1 = [1, 2, 3, False] b = set(b1) # {1, 2, 3, False} ``` 要注意,如果remove不存在的東西會出錯, 但discard則不會。 ---- ## 操作 ### 集合互動 ```python a = {1, 2, 3} b = {1, 4} # 交集(a和b兩個都要有) c = a & b # {1} c = a.intersection(b) # 同功能,看得懂就好,建議寫上面的 # 聯集(a或b至少一個有) c = a | b # {1, 2, 3, 4} c = a.union(b) # 差集(a有b沒有) c = a - b # {2, 3} c = a.difference(b) # 對稱差集(a有b沒有 或 b有a沒有) c = a ^ b # {2, 3, 4} c = a.symmetric_difference(b) ``` ---- ## 子集合、超集合 如果a有的元素b都有,則a是b的子集合 b是a的超集合。 a是b的真子集合、b是a的真超集合代表 b包含了不只a,還有其他東西 ---- ## 操作 集合比較 | 運算 | 意義 | 同義運算 | |:---- |:------------ | --- | | a>=b | a是b的超集 | a.issuperset(b) | | a>b | a是b的真超集 | | a<=b | a是b的子集 | a.issubset(b) | | a<b | a是b的真子集 | --- # tuple元組 ---- ## 性質 tuple類似list,都可以一個個存取 tuple裡的元素不能修改,只能存取或直接覆蓋tuple ---- ## 操作 ### 宣告 可以由小括號()包起來,或是用tuple()宣告 如果是空的,只能用tuple()宣告 如果只有一個元素,要用()的話後面要接,,不然tuple會被拆掉 ```python a = (1, 2, 3) # a=(1, 2, 3) b = tuple() # b=() c = (10,) # c=(10,) d = (2) # d=2 ``` ---- ## 操作 ### tuple拆解 如果有一個長度n的tuple,可以用n個變數去拆解他 ```python a = (1, 5, 2) x, y, z = a # x=1, y=5, z=2 b, c = (10, 1) # b=10, c=1 ``` ---- ## tuple和set、list的互動 可以用tuple來宣告list和set 裡面也可以用小括號包起來的tuple ```python a = (1, 3, 2, 3) b = list(a) # [1, 3, 2, 3] c = set(a) # {1, 3, 2} d = list((1, a)) # [1, (1, 3, 2, 3)] ``` --- # dict字典 ---- ## 性質 字典類似list,但是是以不重複的字串為 索引(鍵值key),而不是連續的數字。 和set一樣,也是以大括號包起來。 ---- ## 操作 宣告 ```python a = {} # 空字典(因此不能這樣宣告空集合) b = {'a' : 10, 'b' : [1, 2]} # {'a' : 10, 'b' : [1, 2]} c = dict(a = 4, c = 'app') # {'a' : 4, 'c' : 'app'} d1 = [['a', 2], ['1', 3]] d = dict(d1) # {'a' : 2, '1' : 3} ``` ---- ## 讀取、新增、修改 ```python a = {'a':3} print(a['a']) # 輸出:3 a['hi'] = 'no' # {'a' : 3, 'hi' : 'no'} a['a'] = 2 # {'a' : 2, 'hi' : 'no'} print(a.get('hi')) # 輸出:'no',如果[]內的不存在會出錯,但get不會 print(a.setdefault('why', 1)) # 輸出:1 # a={'a' : 2, 'hi' : 'no', 'why' : 1},類似get,但若不存在會補上 ``` ---- ## dict轉換成set 可以用set()來把dict變成set, 只會保留鍵值 ```python a = {'a' : 10, 'b' : [1, 2]} b = set(a) # b = {'a', 'b'} ``` --- # 通用操作 ---- ## 長度 len()可用來取得裡面有多少元素 對list、set、tuple、dict都可以用 ```python a = [1, 2, 3] b = {2, 3} c = (3, 4, 5, 6) print(len(a)) # 3 print(len(b)) # 2 print(len(c)) # 4 ``` ---- ## 包含 對list、set、tuple都可以用 dict會先自動變成set後再判斷 in 可檢查一物是否在此資料結構內 ```python a = [1, 2, 3] b = {2, 3, 4} c = (3, 4, 5) print(2 in a) # 輸出:True print(2 in b) # 輸出:True print(2 in c) # 輸出:False print(True in a) # 輸出:True ``` ---- ## 刪除 del可以刪除某個值 對list、dict可以用 ``` a = {'a' : 1, 'b' : 3} del a['a'] # a = {'b' : 3} ``` ---- ## 存取並刪除 .pop()可以存取某個值,並且將其刪除 對list、dict可以用 ``` a = {'a' : 1, 'b' : 3} x = a.pop('a') # a = {'b' : 3}, x=1 b = [1, 2, 3, 4] y = b.pop() # a = [1, 2, 3], y=4 (只有list可以空) ``` ---- ## 清除 .clear()可以把整個清空 對list、set、dict可以用 --- # 注意 True和1是一樣的,False和0也是 這對於set、in等會有影響
{"title":"資料結構-1","contributors":"[{\"id\":\"00ad9127-6491-4b3d-829b-7847a217f8e5\",\"add\":5016,\"del\":936}]","description":"資料結構是可以儲存值的容器"}
    115 views