追蹤者

2018年1月18日 星期四

精通Python(二)

第三章
✪ 串列、Tuple、字典、集合
*Tuple 是不可變的,當你只派一個元素給它就不能更改了,串列是可變的,可以插入、刪除元素。

*串列
-用[]或list()建立
>>>weekdays = ['Monday','Tuesday','Wednesday','Thursday','Friday']
>>>another_empty_list = list()
-用list()將其他資料類型轉換成串列
>>>list('cat')
['c', 'a', 't']
-用一個範圍的位移值來以slice取出項目
將串列反過來
>>> marxes = ['gg','hh','cc']
>>> marxes[::-1]
['cc', 'hh', 'gg']
-用append() 將項目附加到結尾,和用+=結合串列
>>> others = ['gu','kk']
>>> marxes + others
['gg', 'hh', 'cc', 'gu', 'kk']
>>> marxes.append(others)    #(會被加成一個串列項目)
>>> marxes
['gg', 'hh', 'cc', ['gu', 'kk']]
-用insert()與位移值加入項目
>>> marxes.insert(3,'apple')
>>> marxes
['gg', 'hh', 'cc', 'apple', ['gu', 'kk']]
-用del 與 位移值刪除一個項目
>>> del marxes[-1]
>>> marxes
['gg', 'hh', 'cc', 'apple']
-用remove 與值刪除項目
>>> marxes.remove('apple')
>>> marxes
['gg', 'hh', 'cc']
-用pop()與位移值取得一個項目並刪除他
 # 如果呼叫pop() 並使用一個位移值他會回傳該位移值的項目,如果沒有使用引數,他會使用-1
 # pop(0)會回傳串列開頭,pop()和pop(-1)回傳串列結尾
-用index 與值 來尋找某項目的位移值
>>> marxes.index('hh')
1
-用in 來測試值
>>> 'hh' in marxes
True
>>> 'bird' in marxes
False
-用count()算出某個值出現次數
-用join()來轉換字串
-用sort() 排序項目
@ sort()會就地排序串列本身
@ sorted() 會排序串列並回傳副本
>>> sorted_marxes = sorted(marxes)
>>> sorted_marxes
['cc', 'gg', 'hh']
>>> marxes # sorted_marxes 是一個副本,建立他不會更改原先marxes內順序
['gg', 'hh', 'cc']
>>> marxes.sort() # sort()則會改變
>>> marxes
['cc', 'gg', 'hh']
-多類型sort
>>> numbers = [2,1,4.0,3]
>>> numbers.sort()
>>> numbers
[1, 2, 3, 4.0]
-用=來指派,用copy來複製
>>> a= [1,2,3]
>>> a
[1, 2, 3]
>>> b=a
>>> b
[1, 2, 3]
>>> a[0] = 'hello'
>>> a
['hello', 2, 3]
>>> b # 注意 b 只是參考 與 a 同樣的串列物件無論我們用名稱a,b來變更串列內容,兩者都會反映出來
['hello', 2, 3]
>>> b[1] = 'josh'
>>> b
['hello', 'josh', 3]
>>> a
['hello', 'josh', 3]

* Tuple
-用()建立 Tuple
>>>empty_tuple = ()
-要讓tuple 有一個或多個元素,則在每個元素後面加上一個逗號
>>> one_marx = 'gg',
>>> one_marx
('gg',)
 多個元素
>>> marx_tuple = 'gg','cc','hh'
>>> marx_tuple
('gg', 'cc', 'hh')
>>> marx_tuple = ('zz','nn','mm')   # 可用括號括起來
>>> marx_tuple
('zz', 'nn', 'mm')

*字典(dictionary) - 不在乎順序,每個值有獨一無二的鍵
-用{}建立字典
>>> empty_dict = {}
>>> empty_dict
{}
>>> bierce = {"book" : "something to read","banana":"a fruit","man":"a  gender"}
>>> bierce
{'book': 'something to read', 'banana': 'a fruit', 'man': 'a  gender'}
-用dict()轉換,每個序列的第一個項目都會被當成鍵,第二個項目會被當成值
-用[鍵]添加或變更項目
-用update()合併
>>> first = {'a':'1','b':'2'}
>>> first
{'a': '1', 'b': '2'}
>>> second = {'b':'hello'}
>>> first.update(second)
>>> first
{'a': '1', 'b': 'hello'} #此合併第二個字典會勝出
-用del 與鍵刪除項目
>>> del first['b']
>>> first
{'a': '1'}
-用clear()刪除所有項目
-用 in 來測試鍵
-用 [鍵]來取得項目 或用 get()
>>> first['a']
'1'
>>> first.get('a')
'1'
>>> first.get('b')
>>> # 得到 none
-用keys()得到所有的鍵
-用values()得到所有的值
-用items()取得所有的鍵/值對

*集合 像是被移除值,只留下鍵的字典
-以set()來建立 或將一個或多個以逗號分隔的值包在大括號
>>> even_numbers = {0,2,4,6,8}
>>> even_numbers
{0, 2, 4, 6, 8}
>>> odd_numbers = {1,3,5,7,9}
>>> odd_numbers
{1, 3, 5, 7, 9}
-轉換其他類型
>>> set('letters')
{'r', 'e', 's', 'l', 't'}
-結合與運算子
集合交集運算子 &
>>>for name, contents in drinks.items():
if contents & {'vermouth','orange juice'}:
print(name)
# & 運算子會產生一個集合,存有你所比較的兩個串列內都有的項目
-取得交集
>>> a = {1,2}
>>> b = {2,3}
>>> a&b   # 或者a.intersection(b)
{2}
-取得聯集 | # a|b  或者 a.union(b)
-取得差集 - # a-b  或者 a.difference(b)
-互斥或   ^ 只屬於其中一個的項目 # a^b  或者 a.symmetric_difference(b)
>>> a^b
{1, 3}
-用 <= 或 issubset檢查某集合是否為另一集合之子集

沒有留言:

張貼留言