2018年4月23日 星期一

Python筆記:串列(list)、Tuple、字典(dictionary)、集合(set)

List&Tuple

1. 與字串不同,tuple與list的元素可以是不同的類型,且可以是任何Python物件
2. list可以用[Object A, ObjectB, ...]的方式建立。
3. list()可以用來建立empty list。也可以用來轉換其他資料結構為list:


>>>list('meow')
['m', 'e', 'o', 'w']

或是把tuple轉換為list:

>>> tup = ('a', 'b', 'c')
>>>list(tup)
['a', 'b', 'c']

4. 我們可以用[ : : -1]來把list內的元素倒置。

串列操作

假設mlist = [ 'a', 'b', 'c'] ; mlist2 = [ 'd', 'e', 'f']。
1. mlist.extend(mlist2)可以把串列無縫合併為 [ 'a', 'b', 'c', 'd', 'e', 'f']。
2. mlist += mlist2也是一樣的效果。
3. mlist.append(mlist2)則是把mlist2當成一個新元素加入mlist。
4. 用insert( pos, el ) 可以把el加到pos,超出pos的話會和append()一樣,加入結尾。
5. 用del mlist[pos]可以把位在pos的元素移除,注意到del是一種Python陳述式而非函式。
   這種特殊的陳述式是賦值( = )的反向操作。
6. 用mlist.remove(el)可以把el給移除。
7. mlist.pop(pos)會把位在pos的元素移出,預設是取出結尾的元素,相當於pos = -1。

從以上的操作之中,我們可以實作出LIFO(Last In First Out)或FIFO(First In First Out)資料結構。LIFO相當於堆疊(stack),可以用pop()和append()完成 ; FIFO相當於佇列(queue),可以用pop(0)和append()完成。

8. 用mlist.index(el)來找出某個元素的index,夠直白吧。
9. 用in來檢查list是否存在某值:

>>> mlist3 = [ 'bird', 'min', 'ham' ]
>>> 'min' in mlist3
True
>>> 'B' in mlist3
False

10. 如果要排序元素,可以使用sort()來就地(sort in place)排序,回傳list本身。如果要回傳副本的話可以使用sorted()。數字的排序預設是升冪,但我們可以用sort(reverse=true)來改為降冪排列。

Tuple

1. 因為其不可變的性質,我們可以說Tuple是constant list。
2. 我們可以用()來建立空tuple,也可以直接用mtuple = 'a', 'b', 'c'的方式建立tuple。
3. tuple unpacking指的是把一個tuple指派給多個變數,像是a, b, c = mtuple。
4. tuple可以用來交換變數的值,像是a, b = b, a這樣,就可以把a,b 各自所含的值給交換。

Dictionary

1. 字典又稱為associative array, hash, hashmap,其中的元素為鍵值對(key-value pair),鍵可以是任何不可變的Python類型:Boolean, Integer, Floating point, tuple, string....但是字典通常是可變的,這代表字典的元素可以被新增、刪除、改變。
2. 用{}來建立空字典。
3. 用dict(Object)來建立字典,其中Object可以是任何含有鍵值對的序列,包含類似'ab', ['a', 'b'], ('a', 'b')這樣的雙項目,都會被視為一組鍵值對 'a' : 'b'。
4. 用dict1.update(dict2)的方式來合併字典。
5. 用del dict1[key]的方式來刪除某個元素。
6. 用dict1.clear()來清除字典。
7. 用in來找字典是否有某個鍵。
8. 用dict2.keys()來取得包含所有鍵的一個可迭代(iterable)的dict_keys物件,這種物件因為不會像Python2回傳的list一樣佔用那麼多記憶體及消耗時間。
9. 用dict2.values()來取得所有的值,用dict2.items()取得所有的鍵值對。

Set

1. 集合就像是從鍵值對去掉值的字典。
2. 用set()來建立空集合,用大括號建立一般的集合。
3. 因為{}會被解譯器優先解譯為空字典,所以不能用{}建立空集合。
4. 用set(Object)來轉換其他類型的物件為集合。
5. 經常會用in來檢查集合內容或是設定迴圈變數值:

>>> alphabet = { 'a' : {'x', 'y', 'z'}, 'b' : {'y', 'z'}, 'c' : {x} }
for key, value in alphabet.items():
      if  'y' in value:
             print(key)

6. 用'&'或是intersection()來取得交集,或是用'|'或union()來取得聯集,或是用'-'或difference()來取得差集
7. 用'<='或issubset()來檢查子集合。用'<'來檢查真子集合(proper subset, 代表兩集合不一樣)。也可以用'>='或ussuperset()來檢查超集合(superset),用'>'來檢查真超集合(proper superset)。

沒有留言:

張貼留言