淺析Python字符串索引、切片、格式化

除瞭數字,Python中最常見的數據類型就是字符串,無論那種編程語言,字符串無處不在。例如,從用戶哪裡讀取字符串,並將字符串打印到屏幕顯示出來。 字符串是一種數據結構,這讓我們有機會學習索引和切片——用於從字符串中提取子串的方法。

1 字符串索引

在Python語法支持中,我們簡單的闡述過字符串的使用,現在我們看看python程序在處理字符串時,如何對其進行索引,打印出其中的每個字符串。我們輸入一個字符串:’你好,Lucky’,Python使用方括號 [] 來對字符串進行索引,方括號內的數字 0~n 表示將要獲取的字符串,如圖1-1所示,sting[0~7]分別對應不同的值,最小的字符換索引為0,最大的字符串索引比字符串長度小1。

如果 string 指向一個長度為 n 的字符串, 則 string[0] 為第一個字符,string[1] 為第二個字符, string[2] 為第三個字符,依此類推。string[n-1] 為最後一個字符。

當然,在上面的示例中,string[8]索引超出瞭字符串的末尾,導致的錯誤提示,這點需要註意。Python索引為何從0開始?我們這樣理解便可: 索引值用於測量與字符串第一個字符相隔的距離, 就像一把尺子(其刻度也是從零開始)。這 讓有些索引計算更簡單,也與函數 %(求餘) 一致。% 經常用於索引計算,自然也可能返回 0。

實際應用中,往往不會隻用到正向索引(本文理解從左向右),當你需要訪問字符串的最後一個字符時,也可以使用正向表達式,但字符串過長時明顯不便,所以Python提供瞭一種方面的索引方式:從右向左(負數索引)來表示。如下:字符串的最後一個字符為 string[-1],其索引過程即可按照圖1-1進行修改,此處不做闡述。

1.1 循環索引字符

假如需要依次訪問字符串的每個字符,需要計算出所給字符串的編碼總和,對比兩種代碼方法,如下圖實現及結果,第一種codesum1()函數: 使用 for 循環時,在循環的每次迭代開頭,都會將循環變量 c 設置為 s 中的 下一個字符。使用索引訪問 s 中字符的工作由 for 循環自動處理。

第二種codesum2()函數使用瞭常規訪問s中字符的方法,對比codesum1()函數可以發現,雖然二者計算結果一致,但第二種函數的代碼明顯較為復雜,理解程度上稍微差一些。當然,這是多數人的理解,有些人可能覺得第二種實現更好一些。

def codesum1(s):
    total = 0
    for c in s:
        total = total + ord(c)
    return total
 
def codesum2(s):
    total = 0
    for i in range(len(s)):
        total = total + ord(s[i])
    return total

2 字符使用

在所有編程語言中,字符串都是由字符所組成,而所有字符都有對應的字符編碼與之相對應。在Python中,我們可以使用ord()函數來學習。ord() 函數是 chr() 函數(對於8位的ASCII字符串)或 unichr() 函數(對於Unicode對象)的配對函數,它以一個字符(長度為1的字符串)作為參數,返回對應的 ASCII 數值,或者 Unicode 數值,如果所給的 Unicode 字符超出瞭你的 Python 定義范圍,則會引發一個 TypeError 的異常。

關於Unicode做一個簡單的背景介紹: Unicode 提供瞭一個大得多的字符編碼集。出於方便考慮,Unicode 的前 256 個 字母為 ASCII 碼,因此如果你隻處理英文字符,幾乎不用考慮 Unicode 的細節。

>>> ord('a')
97
>>> ord('b')
98
>>> ord('c')
99

給定字符編碼,可使用函數 chr 來獲悉對應的字符:

>>> chr(99)
'c'
>>> chr(98)
'b'
>>> chr(97)
'a'

字符編碼是根據Unicode分配的,而Unicode是一個龐雜的編碼標準,涵蓋瞭全球各種語言中的符號和字符,使用十分廣泛 。並非所有字符都有可視的標準符號。例如,換行字符、回車字符和制表符都是不可見的,雖然它們帶來的效果可見。這些字符屬於空白字符——在印刷頁面上顯示為空白。 如下表:

其它的字符以普通格式輸出

舉兩個個簡單的常用示例:

1. 在 Python 中,表示換行的標準方式是使用字符 \n:

2. 在字符串中包含反斜杠、單引號和雙引號,通常需要使用對應的轉義字符:

轉義字符是單個字符, 為讓 Python 知道下一個字符是特殊字符, 必須使用 \,但在計算字符串的長度時,並不將 \ 視為額外的字符。例如:

在使用轉義字符時,還有一點需要特別註意的是:在表示文本行末尾方面,不同操作系統遵循的標準是不同的。Windows 使 用 \r\n 表示行尾,OS X 和 Linux 使用 \n, 而 OS X 之前的 Mac 操作系統使用 \r。

2.1 字符串運算

數字有其標準的運算方式,字符串同樣也有著一定的運算。下面來看下字符串的運算符。

示例 :

1.x和y分別賦值字符串;

>>> x = "I am coming"
>>> y = "Python Language"

3 字符串切片

在 Python 中,可使用切片從字符串中提取子串。要對字符串執行切片操作,可指定兩個索引:要提取的第一個字符的索引;要提取的最後一個字符的索引加 1。例如:

用於切片的索引與用於訪問各個字符的索引相同:第一個索引總是為零,而最後一個索引總是比字符串長度小 1。一般而言,string[begin:end]返回從索 引 begin 到 end-1 的子串。註意:如果 string 是一個字符串,則要訪問索引 i 對應的字符,可使用 string[i] 或 string[i:i+1]。

3.1 切片方法

如果想要省略字符串的起始索引,Python將假定為0;如果需要省略字符串的終止索引,Python 會假設你要提取到字符串末尾。

實用示例:取值文件名中的擴展名。

def get_ext(fname):
    dot = fname.rfind('.')
    if dot == -1: # fname 中沒有
        return ''
    else:
        return fname[dot + 1:]

註意第一處標紅需要加引號好,第二處輸入的文件名沒有擴展名,故沒有返回值。該函數的實現過程:確定最右邊的 ‘.’ 的索引(因此使用 rfind 從右往左查 找);如果 fname 不包含 ‘.’,則返回一個空字符串,否則返回 ‘.’ 後面的所有字符。

在索引字符串時所講述的正向、負向索引同樣可以應用於切片中。

使用負數索引時,這樣做通常會有所幫助:將字符串寫到紙上,再標出每個字符的正索引和負索引,就像圖 1-1 那樣。雖然這樣做確實需要多用一兩分鐘時間,但可以很好地避免常見的索引錯誤。

4 字符串格式化

Python 支持格式化字符串的輸出 。這會用到一個較為復雜的表達式,但最基本的用法是將一個值插入到一個有字符串格式符 %s 的字符串中。

>>> print("我最喜歡的食物是%s,它的熱量是%d千焦" %('hot dog',3500))
我最喜歡的食物是hot dog,它的熱量是3500千焦

我們將python字符串格式化符號整理如下:標紅為字符串格式化中的輔助指令

示例:

對於Python字符串格式化的輸出,可以通過上述幾個例子體驗一下字符串區別與基本使用。Python本身已經自帶瞭許多很有用的函數模塊,簡化瞭字符串的使用,增強瞭其功能。後面,我們會對Python的字符串函數以及正則使用做較為詳細的闡述。

到此這篇關於淺析Python字符串索引、切片、格式化的文章就介紹到這瞭,更多相關Python字符串內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: