Skip to content

Fluent Python Notes: An array of sequences

  • Python

私人筆記,有錯誤煩請指正

Fluent Python Github


序列(Sequence)

可分成容器序列、一般序列;或分成可變及不可變。容器序列保存物件的參考,可以是任何型態;一般序列實際儲存項目的值,但只能保存數字、字元或位元組

容器「有些物件裡面有其他物件的參考,這些物件稱為容器」

collections.abc


List Comprehension(listcomp)

如果你不是只想建構串列,就不該使用listcomp,如果listcomp的長度太長,請考慮用for迴圈。Python 2.x 中listcomp中的變數會影響到外部環境的變數

Generator Expression(genexp)

串列以外的序列類型應該使用genexp,可節省記憶體空間(透過for迴圈一次產生一個項目)


Tuple可充分扮演紀錄的角色,原因是他的拆解機制(Unpacking)


slice跟range排除最後一個項目的原因

  • 容易看出或計算長度,range(start, stop)或my_list[start:stop]的長度都是stop – start
  • 區分序列成多個部份而不會重疊,my_list[:x]與my_list[x:]


建構巢狀串列


重要的Python API慣例

當函式或方法就地改變物件時,必須回傳None,來讓呼叫方知道物件本身已被改變,而且沒有創建新的物件,e.g. list.sort、random.shuffle。這樣做有一個缺點,無法層疊這些方法的呼叫式(Fluent Interface 流式接口);反之,會回傳新的物件的例子如sorted、所有str的方法


待補充:bisect、memorview, numpy.ndarray, collections.deque


拿list來裝混合型態的物件並不實用,因為list的某些操作可能會無法使用,請用tuple,因為相較之下這種作法自然很多(tuple每個項目其實都代表是個欄位)


list.sort與sorted的排序演算法是用Timesort,會根據資料的排序狀況來決定用插入排序還是合併排序

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *