第16章 使用列表 一

2022-03-12 07:37:34 字數 1528 閱讀 7522

列表是同質的:列表的所有元素都具有相同的型別。元素型別為t的列表寫成list[t]

列表型別是協變的:對於每一對型別s和t來說,如果s是t的子類,那麼list[s]是list[t]的子型別。

head : 返回列表的第乙個元素

tail : 返回除第乙個之外所有元素組成的列表

isempty:如果為空,返回true

前兩個僅能夠作用在非空列表上。

用模式匹配實現插入排序的**:

1 def isort(xs : list[int]) : list[int] = xs match

56 def insert(x : int , xs : list[int]) : list[int] = xs match

模式匹配。其中 :: 左邊的加到右邊的前面,組成新的list。

一階方法是指不以函式做入參的方法。

* 連線列表:是一種與 :: 接近的操作,寫做「:::」,不同的是兩個操作元都是列表。xs ::: ys的結果是依次包含xs和ys所有元素的新列表。如:list(1,2) ::: list(3,4,5)   res: list[int] = list(1,2,3,4,5)。同樣也是右結合。即從右往左運算

* 分治原則:

分:先用模式匹配把輸入列表拆分為更簡單的樣本,然後根據每個樣本構建結果。

治:如果結果是非空列表,那麼一塊塊部件將通過同樣的遞迴遍歷自滿構建出來。

* 列表的長度:length。因為要遍歷整個列表來找到尾部,所以比較費時。因此,在判斷乙個列表是否為空時,最後採用xs.isempty而不是用length==0 來判斷

* 訪問列表尾部:init方法和last方法。init得到除了最後乙個元素以外的所有元素;last得到最後乙個元素。 同樣不能用於空列表。

注意:組織好資料,以便讓所有的訪問都集中在列表的頭部,而不是尾部。

* 反轉列表:reverse 方法。它是建立了新的列表而不是對原列表進行操作。

* 字首字尾和splitat:take返回xs列表的前n個元素,drop返回xs列表除了前n個元素之外的所有元素。splitat操作在指定位置拆分列表,並返回對偶列表(元組形式)

* 嚙合列表:zip。可以把兩個列表組成乙個對偶列表。常用到的情況是把列表元素與索引嚙合在一起。這時使用zipwithindex方法會更為有效。

* 顯示列表:tostring和mkstring方法。 mkstring方法格式為:xs mkstring (pre , sep , post)。其中,pre為列表的字首,sep為每兩個元素之間插入的字串,post為在最後的字尾字串。有兩種變體,一:省略前後兩個部分,只保留中間的字串;二:忽略所有的引數。還有名為addstring的變體,可以把構建好的字串新增到stringbuilder

*  轉換列表:elements,toarray,copytoarray。如果需要用列舉器訪問列表元素,就可以用elements方法,得到iterator

舉例為歸併排序。還沒看懂。應該就是二分排序的意思吧?涉及分治原則及柯里化,因此還要把以前的知識點再回頭看一下。

第16章 pyinstaller庫的使用

pyinstaller庫概述 將.py源 轉換成無需源 的可執行檔案 py檔案通過pyinstaller轉換成windows linux以及mac的可執行檔案 pyinstaller庫是第三方庫 1 官方 2 第三方庫 使用前需要額外安裝 3 安裝第三方庫需要使用pip工具 pyinstaller庫...

第16章 Debug Shell指令碼

本章主要介紹一些方便的 有效的 更好的輸出除錯資訊的方法。本章要學習的知識點 1 看懂指令碼輸出的錯誤資訊,並逐步定位到真正的錯誤 2 如何堅持shell指令碼的語法是否有錯誤 3 如何通過track模式找到程式的錯誤 4 分析指令碼錯誤的一般步驟 5 如何在指令碼程式中新增debug支援。當我們執...

第16章 檔案服務

ftp 檔案傳輸協議 軟體包 vsftpd ftp埠 控制埠 command 21 tcp 資料埠 data 20 tcp 主動模式 配置檔案 etc vsftpd vsftpd.conf 主目錄 var ftp ftp程式預設分享的乙個本機目錄 yum y install vsftpd 安裝ftp...