intumu.com:機器學習(ML)、人工智能(AI)和土木工程的(TM)關系?zhuanlan.zhihu.com

前言
着手開始寫的時候就一直有一個畫面在腦子中出現:小豬佩奇第N級,豬爸爸拿出來一本《混凝土的故事》,打開書的時候說道:混凝土是由砂子、水、水泥組成的,結果其他人都睡着了。于是,我在想,要是給土木人講:python萬法皆對象,對象類型有:數字:int,long,float,complex,bool
字元:str,unicod
清單:list
字典:dict
元組:tuple
檔案:file
其他類型:集合(set),當機集合(frozenset),類類型等。
是不是也有人睡着?相反,如果我直接說砂子、水泥、鋼筋、混凝土,是不是覺得親切?是以接下來将會從一磚一瓦的建築材料說Python。
萬法皆對象:在基建領域,你所看到的構築物就是有以上提到的基礎建材組成;在Python領域對象類型就可以看做基礎建築材料,然後由不同的施工工藝産生不同的單體子產品或構造物。例如:一個函數(施工工藝)所包含的參數(基礎建材),形成一個僞代碼。
僞代碼
#圍牆條形基礎開挖
變量類型:鏟子、䦆頭、羊角碾、塊石、磚頭、水泥、混凝土
#工藝流程:
開挖條形基坑
夯實基礎
抛填塊片石
混凝土填充找平
砌磚
#以上即為面向過程程式設計,下面先說說數字類型。
真代碼(字元串)
索引和分片
索引
對于一個有序序列,可以通過索引的方法來通路對應位置的值。字元串便是一個有序序列的例子,Python使用 [] 來對有序序列進行索引。
s = "hello world"
s[0]
'h'
Python中索引是從 0 開始的,是以索引 0 對應與序列的第 1 個元素。為了得到第 5 個元素,需要使用索引值 4 。
s[4]
'o'
除了正向索引,Python還引入了負索引值的用法,即從後向前開始計數,例如,索引 -2 表示倒數第 2 個元素:
s[-2]
'l'
單個索引大于等于字元串的長度時,會報錯:
s[11]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
in ()
----> 1 s[11]
IndexError: string index out of range
分片
分片用來從序列中提取出想要的子序列,其用法為:
var[lower:upper:step]
其範圍包括 lower ,但不包括 upper ,即 [lower, upper), step 表示取值間隔大小,如果沒有預設為1。
s
s[1:3]
分片中包含的元素的個數為 3-1=2 。
也可以使用負索引來指定分片的範圍:
s[1:-2]
'ello wor'
包括索引 1 但是不包括索引 -2 。
lower和upper可以省略,省略lower意味着從開頭開始分片,省略upper意味着一直分片到結尾。
s[:3]
'hel'
s[-3:]
'rld'
s[:]
'hello world'
每隔兩個取一個值:
s[::2]
'hlowrd'
當step的值為負時,省略lower意味着從結尾開始分片,省略upper意味着一直分片到開頭。
s[::-1]
'dlrow olleh'
當給定的upper超出字元串的長度(注意:因為不包含upper,是以可以等于)時,Python并不會報錯,不過隻會計算到結尾。
s[:100]
'hello world'
使用“0”作為索引開頭的原因
使用[low, up)形式的原因
假設需要表示字元串 hello 中的内部子串 el :
|方式|[low, up)|(low, up]|(lower, upper)|[lower, upper] |--|--|--|--|--| |表示|[1,3)|(0,2]|(0,3)|[1,2] |序列長度|up - low|up - low|up - low - 1|up - low + 1
對長度來說,前兩種方式比較好,因為不需要煩人的加一減一。
現在隻考慮前兩種方法,假設要表示字元串hello中的從頭開始的子串hel:
|方式|[low, up)|(low, up] |--|--| |表示|[0,3)|(-1,2]| |序列長度|up - low|up - low|
第二種表示方法從-1開始,不是很好,是以選擇使用第一種[low, up)的形式。
使用0-base的形式Just to beautiful to ignore.
----Guido van Rossum
兩種簡單的情況:從頭開始的n個元素;使用0-base:[0, n)
使用1-base:[1, n+1)
第i+1個元素到第i+n個元素。使用0-base:[i, n+i)
使用1-base:[i+1, n+i+1)
1-base有個+1部分,是以不推薦。
綜合這兩種原因,Python使用0-base的方法來進行索引。
土木狗的視角:上一節講了字元串,我們把一段字元串看做磚頭,也說了工地搬磚砌牆的過程中會遇到填空洞或者半截磚,需要用到瓦刀按需截斷。事實上,本節的索引和切片也是異曲同工的,比如在爬網絡資料的時間中,很多字元串很‘髒’,有空格或者各種非正常的編碼字元嵌入其中,最簡單的方式就是使用切片功能,至于正則提取,那是後話,到時候會給大家教一招RE正則中的萬能法則,本節就不贅述。
課後作業(可選)
按上一節運作自己的項目,建立一個*.ipynb檔案,将上面代碼敲入運作。
intumu.com:Python資料分析及可視化執行個體目錄zhuanlan.zhihu.com