翻譯自 這裡
Data Structures :
這裡將之前你學到的一些知識做些延伸說明, 並加一些新的內容.
- More on Lists
串列物件具備某些函示可以使用, 底下為列表即簡單說明 :
* list.append(x)
* list.extend(L)
* list.insert(i, x)
* list.remove(x)
* list.pop([i])
* list.index(x)
* list.count(x)
* list.sort()
* list.reverse()
底下為上面介紹函示使用範例 :
事實上串列比你想像中的還好用, 底下針對串列應用進行說明. 首先透過函式 append() 與 pop() 就可以使用串列模擬 堆疊 (Stack : Last-in, First-out) :
要透過串列本身的函式來模擬 佇列 (Queue : First-in, Last-out) 效率不好, 我們可以 import collections.deque 來幫助我們 :
如果你要建立一個平方元素的陣列, 一般你可以能會這做 :
在 Python 中提供語法蜜糖, 所以你可以在一句內完成 :
再來看一個例子, 如果你有兩個串列 x[]; y[], 你想利用這兩這串列組成一個新的串列且該串列為 x 與 y 串列的元素組合但同一個組合元素兩個值不同 :
事實上你也可以只用一句就完成 :
其實這些在 Python 稱作 "List comprehensions", 底下為更多範例說明 :
而你的函式呼叫在 List comprehension 也可以是巢狀 :
接著我們要來針對 巢狀 的 "List comprehension" 進行範例說明, 首先考慮一個串列如下 :
如果你想要從每個元素的第 i 個子元素取出成為另一個串列的元素, 你可以使用如下巢狀用法 :
底下是如果你不使用 listcomp 可能的作法 :
在實際應用上, 你可以透過 zip() 函式完成上面要求 : (see Unpacking Argument Lists)
The del statement :
如果你要刪除串列或是串列中的元素, 可以使用關鍵字 del :
Tuples and Sequences :
之前我們介紹過 字串 與 串列 時有些特性如使用 index, slice 等的功能其實是來自於他們都是屬於 Sequence data (see Sequence Types — str, bytes, bytearray, list, tuple, range). 除了這兩種類型外, tuple 也是 Sequence data :
tuple 與 字串都是 immutable, 也就是你不能改變 tuple 內的元素. 另外在建立空的 tuple 或是 只含一個元素的 tuple 可以如下 (只有一個元素的 tuple 後面須跟著一個逗點, 說明他是 tuple!) :
另外如果你要 unpack 類型 sequence data 時, 可以使用關鍵字 =, 左邊給對應數目的變數, 右邊給 sequence data :
Sets :
Set 為一資料結構其中的元素不允許重複, 你可以使用 mathematical operations 像 Union, Intersection, Difference, 與 Symmetric difference 來操作它. 要建立 Set 可以使用 {} 包含元素或是使用函式 set(). 但是要注意如果要建立空 Set, 就只能使用 函式 set() 而不能使用 {} (裡面沒有元素), 後者會被當作 字典 物件, 是下一節要講的東西. 底下為 Set 物件使用範例 :
跟 list-comp 一樣, 你也可以這麼用 :
Dictionaries :
字典物件一個 Set 的 key 集合, 並對應到儲存的 value. key 是 Unique 但是 value 不必是. 你可以透過 {} 並在裡面用 key:value 形式存放 key 與 value 的 mapping, 多個 pair 可用 ',' 區隔. 假設你有一個 d 的字典物件, 則你可以使用 list(d.keys()) 取出該字典的 key 集合; 或使用 d['key'] 形式取出 key 對應的 value. 底下為字典物件使用範例 :
或者你可以透過函式 dict() 直接建立 字典物件 :
除此之外, 原本的 list-comp 也可以用在 字典物件 :
如果你的 key 是簡單字串, 那你也可以這樣使用 :
Looping Techniques :
透過函式 items() 你可以同時對字典物件取得 key 與 value :
如果你想要從 sequence 類型資料同時取得 index 與對應值, 可以使用函式 enumerate() :
如果你想同時檢視多個 sequence 類型的資料, 則可以透過函式 zip() 幫你做到 :
如果你想要反著來讀 sequence 資料, 可以使用函式 reversed() :
如果你希望對 sequence 類型資料排序, 考慮函式 sorted() :
More on Conditions :
你可以使用 in 或 not in 決定某個值或是鍵是否存在串列或是字典物件中 ; 或是使用 is 或 is not 決定某兩個物件是否為同一個. 接著在 if 或 while 比較中, Comparison 可以是連鎖的如 a < b == c則會先比較 a < b 接著比較 b==c. 也就是 (a. 接著你也可以使用 Boolean operators and, not 與 or. 其中 not 有最高優先權, or 最低. 所以 A and not B or C 等同 (A and (not B)) or C. 建議加括號讓結果如你預期. 接著在使用 and 或 or 會有所謂的 short-circuit 效應, 務必注意. 參考範例如下 :
Comparing Sequences and Other Types :
那麼串列或是 sequence 類型資料有辦法比較嗎? 答案是可以, 不管什麼物件只要它實作對應的 comparison method, 就可以使用 >, < 來比較它們. 底下是串列比較範例 :
底下為比較物件如果為不同類型時的比較說明 :
Data Structures :
這裡將之前你學到的一些知識做些延伸說明, 並加一些新的內容.
- More on Lists
串列物件具備某些函示可以使用, 底下為列表即簡單說明 :
* list.append(x)
* list.extend(L)
* list.insert(i, x)
* list.remove(x)
* list.pop([i])
* list.index(x)
* list.count(x)
* list.sort()
* list.reverse()
底下為上面介紹函示使用範例 :
事實上串列比你想像中的還好用, 底下針對串列應用進行說明. 首先透過函式 append() 與 pop() 就可以使用串列模擬 堆疊 (Stack : Last-in, First-out) :
要透過串列本身的函式來模擬 佇列 (Queue : First-in, Last-out) 效率不好, 我們可以 import collections.deque 來幫助我們 :
如果你要建立一個平方元素的陣列, 一般你可以能會這做 :
在 Python 中提供語法蜜糖, 所以你可以在一句內完成 :
再來看一個例子, 如果你有兩個串列 x[]; y[], 你想利用這兩這串列組成一個新的串列且該串列為 x 與 y 串列的元素組合但同一個組合元素兩個值不同 :
事實上你也可以只用一句就完成 :
其實這些在 Python 稱作 "List comprehensions", 底下為更多範例說明 :
而你的函式呼叫在 List comprehension 也可以是巢狀 :
接著我們要來針對 巢狀 的 "List comprehension" 進行範例說明, 首先考慮一個串列如下 :
如果你想要從每個元素的第 i 個子元素取出成為另一個串列的元素, 你可以使用如下巢狀用法 :
底下是如果你不使用 listcomp 可能的作法 :
在實際應用上, 你可以透過 zip() 函式完成上面要求 : (see Unpacking Argument Lists)
The del statement :
如果你要刪除串列或是串列中的元素, 可以使用關鍵字 del :
Tuples and Sequences :
之前我們介紹過 字串 與 串列 時有些特性如使用 index, slice 等的功能其實是來自於他們都是屬於 Sequence data (see Sequence Types — str, bytes, bytearray, list, tuple, range). 除了這兩種類型外, tuple 也是 Sequence data :
tuple 與 字串都是 immutable, 也就是你不能改變 tuple 內的元素. 另外在建立空的 tuple 或是 只含一個元素的 tuple 可以如下 (只有一個元素的 tuple 後面須跟著一個逗點, 說明他是 tuple!) :
另外如果你要 unpack 類型 sequence data 時, 可以使用關鍵字 =, 左邊給對應數目的變數, 右邊給 sequence data :
Sets :
Set 為一資料結構其中的元素不允許重複, 你可以使用 mathematical operations 像 Union, Intersection, Difference, 與 Symmetric difference 來操作它. 要建立 Set 可以使用 {} 包含元素或是使用函式 set(). 但是要注意如果要建立空 Set, 就只能使用 函式 set() 而不能使用 {} (裡面沒有元素), 後者會被當作 字典 物件, 是下一節要講的東西. 底下為 Set 物件使用範例 :
跟 list-comp 一樣, 你也可以這麼用 :
Dictionaries :
字典物件一個 Set 的 key 集合, 並對應到儲存的 value. key 是 Unique 但是 value 不必是. 你可以透過 {} 並在裡面用 key:value 形式存放 key 與 value 的 mapping, 多個 pair 可用 ',' 區隔. 假設你有一個 d 的字典物件, 則你可以使用 list(d.keys()) 取出該字典的 key 集合; 或使用 d['key'] 形式取出 key 對應的 value. 底下為字典物件使用範例 :
或者你可以透過函式 dict() 直接建立 字典物件 :
除此之外, 原本的 list-comp 也可以用在 字典物件 :
如果你的 key 是簡單字串, 那你也可以這樣使用 :
Looping Techniques :
透過函式 items() 你可以同時對字典物件取得 key 與 value :
如果你想要從 sequence 類型資料同時取得 index 與對應值, 可以使用函式 enumerate() :
如果你想同時檢視多個 sequence 類型的資料, 則可以透過函式 zip() 幫你做到 :
如果你想要反著來讀 sequence 資料, 可以使用函式 reversed() :
如果你希望對 sequence 類型資料排序, 考慮函式 sorted() :
More on Conditions :
你可以使用 in 或 not in 決定某個值或是鍵是否存在串列或是字典物件中 ; 或是使用 is 或 is not 決定某兩個物件是否為同一個. 接著在 if 或 while 比較中, Comparison 可以是連鎖的如 a < b == c則會先比較 a < b 接著比較 b==c. 也就是 (a. 接著你也可以使用 Boolean operators and, not 與 or. 其中 not 有最高優先權, or 最低. 所以 A and not B or C 等同 (A and (not B)) or C. 建議加括號讓結果如你預期. 接著在使用 and 或 or 會有所謂的 short-circuit 效應, 務必注意. 參考範例如下 :
Comparing Sequences and Other Types :
那麼串列或是 sequence 類型資料有辦法比較嗎? 答案是可以, 不管什麼物件只要它實作對應的 comparison method, 就可以使用 >, < 來比較它們. 底下是串列比較範例 :
底下為比較物件如果為不同類型時的比較說明 :
This message was edited 52 times. Last update was at 07/01/2012 18:39:24
沒有留言:
張貼留言