天天看點

《Python資料科學實踐指南》一2.2 字元串

本節書摘來自華章出版社《python資料科學實踐指南》一書中的第2章,第2.2節,紀路 著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

在第1章中我們已經接觸過字元串了,python不像其他語言一樣有字元類型,在python中,一個字元僅僅是包含一個字元的字元串。而且字元串也能夠進行運算,主要支援兩種運算符“+”和“*”,示例代碼如下:

這兩個運算符很容易了解,“+”代表字元串拼接,可以組合兩個字元串;“”代表複制多份然後拼接,“”後面的數字就是需要複制的份數;當比較兩個字元串時是按照字典順序比較大小的。稱為運算符的重載。由于字元串類型是一種序列類型,是以當我們隻想取得這個序列中的一部分時,可以使用python中的分片操作:

這裡首先将字元串“abcdefg”指派給變量s,然後在s後面用一對方括号将兩個數字和一個冒号括起來,輸出的結果正好是去掉第一個和最後一個字元,這就是python中對于序列類型的對象所進行的分片操作,冒号前後的兩個值為分片的位置。1代表序列中位置為1的值,–1代表序列中倒數第一個值。這裡需要注意的是,在python中序列索引是以0開始的,而且支援負數索引,不過負數索引是從–1開始的,這很容易了解,因為數學裡的實數域沒有–0這個值。而且區間是左閉右開的,即[1:–1]代表從索引為1(并且包括1)的值開始,直到索引為–1(不包括–1)的值。初學程式設計的人可能會難以了解序列分片為什麼要這樣設計,但實際上這種左閉右開的區間是很友善的一種結構,在2.2節講解循環的時候會做進一步講解。另外針對序列分片還有一個小技巧:

如果在代表分片的方括号中再增加一個冒号之後跟一個數字,那麼這個數字就代表以什麼樣的步長進行分片?假設這個值為2,分片會前進兩個字元再取出一個字元,就會得到“bdf”這樣的結果。實際上如果不指定則最後一個數字預設的步長為1,s[1:-1:1]”與“s[1:-1]”的結果是一緻的。當然步長也可以是負數,聰明的讀者肯定一下子就會明白我的用意:

這裡在步長為–1時左右颠倒了這個字元串。而且當選取整個序列時,起始和終止索引可以省略,隻留下兩個冒号即可。是以在python中分片的完整表達式如下:

s[start:end:step]

當指定的索引超出了字元串的長度時,我們就會得到一個異常:

python的異常是從上向下閱讀,最後一行“indexerror”代表錯誤的類型,“file”開始的這一行中“line 1”代表出錯程式在檔案中的行号,這些資訊有助于我們找到程式出錯的位置,後續的章節會有專門介紹異常處理的内容。

最後,對于一個字元串,要知道如何确定其長度,代碼如下:

這很容易,“len()”是一個内置的函數,可以擷取任意序列類型對象的長度,在這裡s字元串擁有7個字元。