資料結構是可以儲存值的容器
我們最常用的有list、set、dict、tuple。
要注意True和1是一樣的,False和0也是。
這對某些操作有影響
list就是之前講的陣列。
能以a=[x,y,…]宣告。
list內可以存種類型的東西,
也可以存資料結構
增加、刪除
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] # 由位置取得並刪除值
陣列連結
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']
迴圈陣列、陣列分割
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]
字串分裂
str = 'ab. .. c'
a = str.split('.') # 以'.'分開字串
# a = ['ab', ' ', '', ' c', '']
b = str.split() # 沒寫就是以空格分開,不過這時連著的空格中間不分開
# b = ['ab.', '..', 'c']
c = list(str)
# c = ['a', 'b', '.', ' ', ' ', '.', '.', ' ', 'c'] 每個都分開
類似list,但是是用大括號{}包起來
但set內部的元素不會重複
且順序對於set並不重要
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則不會。
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類似list,都可以一個個存取
tuple裡的元素不能修改,只能存取或直接覆蓋tuple
可以由小括號()包起來,或是用tuple()宣告
如果是空的,只能用tuple()宣告
如果只有一個元素,要用()的話後面要接,,不然tuple會被拆掉
a = (1, 2, 3) # a=(1, 2, 3)
b = tuple() # b=()
c = (10,) # c=(10,)
d = (2) # d=2
如果有一個長度n的tuple,可以用n個變數去拆解他
a = (1, 5, 2)
x, y, z = a # x=1, y=5, z=2
b, c = (10, 1) # b=10, c=1
可以用tuple來宣告list和set
裡面也可以用小括號包起來的tuple
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)]
字典類似list,但是是以不重複的字串為
索引(鍵值key),而不是連續的數字。
和set一樣,也是以大括號包起來。
宣告
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}
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,但若不存在會補上
可以用set()來把dict變成set,
只會保留鍵值
a = {'a' : 10, 'b' : [1, 2]}
b = set(a) # b = {'a', 'b'}
len()可用來取得裡面有多少元素
對list、set、tuple、dict都可以用
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 可檢查一物是否在此資料結構內
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等會有影響