依然只講 Python 與其他語言有較大差異的部份稍微說明,Pete 經驗談,對已經熟悉其他語言的,第一次看到所謂的切片(slice)取值的程式碼不太容易看懂,就從這裡下手。其他還是請大家網路查。
先了解幾個基礎資料結構(跟collection較有關的)如下:
Name | 符號 | 序 | 特性 |
---|---|---|---|
List | [ 1, 'two', 3] | sequence | 可包含任何種類的物件:數字,字串,甚至是其他List。佔記憶體小 |
Tuple | (1, 'two', 3) 或者簡略成 1, 'two', 3 | sequence | 不可變。建立單一元素形式為 (4,)。取值方式與 List相似。 |
Set | {1, 'two', 3} | 無序 | 不可重複,要判斷某物件是否存在於 Set 裡速度快。 |
Dict | {1:"one", '二':'two', 3:'three'} | 無序 | 鍵:值。鍵不可重複。佔記憶體大,查找某鍵的值速度快。可增刪鍵:值。 |
Str | “abc” 或者 ‘abc’ | sequence | 可想成組成元素只能char 的Tuple。字串獨有的操作如:replace, lower, split, strip等。 |
List 與 Tuple 以及字串Str 取值方式很接近,都可以用 index 『[ n ]』操作。其中比較需要關注的是切片(slice)用法。切片主要有下列幾種形式,直接舉例說明。Pete 就請大家啟動自己的Jupyter Notebook
py36 #假設於 ~/.bash_alias 有此 Alias
jupyter notebook #假設已經完成上一個 Jupyter設定於 jupyter_notebook_config.py檔
然後請大家在自己的 Browser 連上後做下面的練習
print('aTuple =',aTuple)
print('aTuple[1:8] =',aTuple[1:8]) #從第2個開始到第8個
print('aTuple[1:8:3] =',aTuple[1:8:3]) #從第2個開始到第8個,每3個元素跳著取值
print('aTuple[-1] =',aTuple[-1]) #取最後一個值
print('aTuple[-1:] =',aTuple[-1:]) #取最後一個值來建立新的 tuple
print('aTuple[-2:] =',aTuple[-2:]) #從倒數第2個到最後一個取值,亦即最後兩個元素
print('aTuple[:-2] =',aTuple[:-2]) #從頭到倒數第2個。亦即去掉最後兩個後建立新的tuple
print('aTuple[::-1] =', aTuple[::-1]) #從最後一直到第一個(倒著取值)
print('aTuple[-5:2:-1] =', aTuple[-5:2:-1]) #倒著取 『刪掉最後4個,再刪掉前3個』
print('aTuple[4::-1] =', aTuple[4::-1]) #倒著取『開頭5個值』
print('aTuple[:-4:-1] =', aTuple[:-4:-1]) #倒著取『最後3個值』
print('aTuple[-4::-1] =', aTuple[-4::-1]) #倒著取『刪掉最後3個,留下其他值』
印出的結果如下:
aTuple = ('one', 'two', 'three', 'four', 'five', 6, 7, 8, 9, 10.0)
aTuple[1:8] = ('two', 'three', 'four', 'five', 6, 7, 8)
aTuple[1:8:3] = ('two', 'five', 8)
aTuple[-1] = 10.0
aTuple[-1:] = (10.0,)
aTuple[-2:] = (9, 10.0)
aTuple[:-2] = ('one', 'two', 'three', 'four', 'five', 6, 7, 8)
aTuple[::-1] = (10.0, 9, 8, 7, 6, 'five', 'four', 'three', 'two', 'one')
aTuple[-5:2:-1] = (6, 'five', 'four')
aTuple[4::-1] = ('five', 'four', 'three', 'two', 'one')
aTuple[:-4:-1] = (10.0, 9, 8)
aTuple[-4::-1] = (7, 6, 'five', 'four', 'three', 'two', 'one')
幾個小細節或是特性值得注意:
因為Slice 在後續資料處理上常用到,也很燒腦,Pete 期望大家多費力於此。
專案緣起記錄在 【UP, Scrum 與 AI專案】