2009年7月9日 星期四

Python的基本集合(collection)型態

翻譯作集合(collection)好像蠻弔詭的,因為工程的人很習慣把他們當作set,anyway~
基本上python支援三種(不管是2.6 or 3.0),分別是tuple, list, map

基本上這三種就相當的夠用了,其實也只有兩種,tuple可以看成constant list,不變的list
如果有學過其他程式語言,就更單純了,把list視為list或者動態array,把map當成hash
一切就很自然了

hair = "black", "brown", "blonde", "red"
hair[2]

上面宣告了一個tuple,存取的方式就是使用[]運算子來取得,上面的例子hair[2]就是blonde囉

list基本上跟tuple差不多,差別是,你不能去改變tuple的內容,但是list可以,list有幾種基本運算
宣告空的list就是list=[],夠簡單吧
list.append(x) 在list尾端加入x
list.count(x) 計算list中x元素的個數
list.extend(x) 跟append差不多
list.index(x,start,end) 在[start,end)搜尋元素x,如果找到回傳index,沒找到會丟出例外
list.insert(index,x) 在index之後插入x
list.pop() 取出list最後一個元素,並且回傳他
list.pop(index) 取出list最後一個元素,並且回傳他
list.remove(x) 刪除x元素
list.reverse() 將list反向排列
list.sort() 排序list的內容

如果有基本資料結構的概念就知道,list可以輕易的做到array, list, stack, queue這幾種資料結構
當然,如果你是實際講求效能的,可能就會懷疑[]這運算子是否為O(1)的時間等等,這倒是我不知道的,如果知道的網友,請告訴我,謝謝
那二維陣列呢?多維度陣列呢?這是很幸運與不幸的事情,幸運的是,只要用簡單list在包含list就可以了,比方說list[5]=[],這樣子,同時你也看到一個問題了,他並不保證list元素中是list,也不保證list中的list長度一致,這就是script language的特色吧

最後看到map型態,就把它當作hash table來操作吧,使用{}來宣告空map,裡面的元素key:value使用分號來分開,如同範例
d = {"root": 18, "blue": [75, "R", 2], 21: "venus", -14: None,"mars": "rover", (4, 11): 18, 0: 45}


這裡也再度看到script language的特色,他並不要求你key是相同型態,也不要求value是相同型態,這同時有好處也有壞處
基本的操作有
map.clear() 清空map
map.copy() 複製map
map.items() 取出所有key,value的pair
map.keys() 取出所有的key
map.values() 取出所有的value
通常讀取map會直接用map[key],新增會用map[key]=value
至於拜訪的方式,晚點再寫吧

沒有留言: