iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
1
自我挑戰組

深度學習所需入門知識--一位初學者的認知系列 第 8

Python 燒腦用的 Slice

依然只講 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')

幾個小細節或是特性值得注意:

  1. 表格上各類型對應list(), tuple(), set(), dict(), str() 函數可建立物件
  2. 跟Java 一樣,索引是從[0]開始
  3. 單一元素的 Tuple 是(element1,),而非(element1)。請觀察aTuple[-1] = 10.0 與 aTuple[-1:] = (10.0,) 差異。其他類型無此問題。

因為Slice 在後續資料處理上常用到,也很燒腦,Pete 期望大家多費力於此。

備註:

專案緣起記錄在 【UP, Scrum 與 AI專案】


上一篇
機器學習所需的Python 環境
下一篇
Tensorflow, PyTorch, Mxnet ...
系列文
深度學習所需入門知識--一位初學者的認知31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言