Python中字符串的基本使用詳解
前言
除了數(shù)字,Python中最常見的數(shù)據(jù)類型就是字符串,無論那種編程語言,字符串無處不在。例如,從用戶哪里讀取字符串,并將字符串打印到屏幕顯示出來。 字符串是一種數(shù)據(jù)結(jié)構(gòu),這讓我們有機(jī)會(huì)學(xué)習(xí)索引和切片——用于從字符串中提取子串的方法。
1 字符串索引
在Python語法支持中,我們簡(jiǎn)單的闡述過字符串的使用,現(xiàn)在我們看看python程序在處理字符串時(shí),如何對(duì)其進(jìn)行索引,打印出其中的每個(gè)字符串。我們輸入一個(gè)字符串:'你好,Lucky',Python使用方括號(hào) [] 來對(duì)字符串進(jìn)行索引,方括號(hào)內(nèi)的數(shù)字 0~n 表示將要獲取的字符串,如圖1-1所示,sting[0~7]分別對(duì)應(yīng)不同的值,最小的字符換索引為0,最大的字符串索引比字符串長度小1。
?如果 string 指向一個(gè)長度為 n 的字符串, 則 string[0] 為第一個(gè)字符,string[1] 為第二個(gè)字符, string[2] 為第三個(gè)字符,依此類推。string[n-1] 為最后一個(gè)字符。
當(dāng)然,在上面的示例中,string[8]索引超出了字符串的末尾,導(dǎo)致的錯(cuò)誤提示,這點(diǎn)需要注意。Python索引為何從0開始?我們這樣理解便可: 索引值用于測(cè)量與字符串第一個(gè)字符相隔的距離, 就像一把尺子(其刻度也是從零開始)。這 讓有些索引計(jì)算更簡(jiǎn)單,也與函數(shù) %(求余) 一致。% 經(jīng)常用于索引計(jì)算,自然也可能返回 0。
實(shí)際應(yīng)用中,往往不會(huì)只用到正向索引(本文理解從左向右),當(dāng)你需要訪問字符串的最后一個(gè)字符時(shí),也可以使用正向表達(dá)式,但字符串過長時(shí)明顯不便,所以Python提供了一種方面的索引方式:從右向左(負(fù)數(shù)索引)來表示。如下:字符串的最后一個(gè)字符為 string[-1],其索引過程即可按照?qǐng)D1-1進(jìn)行修改,此處不做闡述。
1.1 循環(huán)索引字符
假如需要依次訪問字符串的每個(gè)字符,需要計(jì)算出所給字符串的編碼總和,對(duì)比兩種代碼方法,如下圖實(shí)現(xiàn)及結(jié)果,第一種codesum1()函數(shù): 使用 for 循環(huán)時(shí),在循環(huán)的每次迭代開頭,都會(huì)將循環(huán)變量 c 設(shè)置為 s 中的 下一個(gè)字符。使用索引訪問 s 中字符的工作由 for 循環(huán)自動(dòng)處理。
第二種codesum2()函數(shù)使用了常規(guī)訪問s中字符的方法,對(duì)比codesum1()函數(shù)可以發(fā)現(xiàn),雖然二者計(jì)算結(jié)果一致,但第二種函數(shù)的代碼明顯較為復(fù)雜,理解程度上稍微差一些。當(dāng)然,這是多數(shù)人的理解,有些人可能覺得第二種實(shí)現(xiàn)更好一些。
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 字符使用
在所有編程語言中,字符串都是由字符所組成,而所有字符都有對(duì)應(yīng)的字符編碼與之相對(duì)應(yīng)。在Python中,我們可以使用ord()函數(shù)來學(xué)習(xí)。ord() 函數(shù)是 chr() 函數(shù)(對(duì)于8位的ASCII字符串)或 unichr() 函數(shù)(對(duì)于Unicode對(duì)象)的配對(duì)函數(shù),它以一個(gè)字符(長度為1的字符串)作為參數(shù),返回對(duì)應(yīng)的 ASCII 數(shù)值,或者 Unicode 數(shù)值,如果所給的 Unicode 字符超出了你的 Python 定義范圍,則會(huì)引發(fā)一個(gè) TypeError 的異常。
關(guān)于Unicode做一個(gè)簡(jiǎn)單的背景介紹: Unicode 提供了一個(gè)大得多的字符編碼集。出于方便考慮,Unicode 的前 256 個(gè) 字母為 ASCII 碼,因此如果你只處理英文字符,幾乎不用考慮 Unicode 的細(xì)節(jié)。
>>> ord('a') 97 >>> ord('b') 98 >>> ord('c') 99
?給定字符編碼,可使用函數(shù) chr 來獲悉對(duì)應(yīng)的字符:
>>> chr(99) 'c' >>> chr(98) 'b' >>> chr(97) 'a'
字符編碼是根據(jù)Unicode分配的,而Unicode是一個(gè)龐雜的編碼標(biāo)準(zhǔn),涵蓋了全球各種語言中的符號(hào)和字符,使用十分廣泛 。并非所有字符都有可視的標(biāo)準(zhǔn)符號(hào)。例如,換行字符、回車字符和制表符都是不可見的,雖然它們帶來的效果可見。這些字符屬于空白字符——在印刷頁面上顯示為空白。 如下表:
轉(zhuǎn)義字符 | 描述 |
\(在行尾時(shí)) | 續(xù)行符 |
\\< | 反斜杠符號(hào) |
' | 單引號(hào) |
\" | 雙引號(hào) |
\a | 響鈴 |
\b | 退格(Backspace) |
\e | 轉(zhuǎn)義 |
\000 | 空 |
\n | 換行 |
\v | 縱向制表符 |
\t | 橫向制表符 |
\r | 回車 |
\f | 換頁 |
\oyy | 八進(jìn)制數(shù),y 代表 0~7 的字符,例如:\012 代表換行。 |
\xyy | 十六進(jìn)制數(shù),以 \x 開頭,yy代表的字符,例如:\x0a代表換行 |
\other | 其它的字符以普通格式輸出 |
舉兩個(gè)個(gè)簡(jiǎn)單的常用示例:
1. 在 Python 中,表示換行的標(biāo)準(zhǔn)方式是使用字符 \n:
2. 在字符串中包含反斜杠、單引號(hào)和雙引號(hào),通常需要使用對(duì)應(yīng)的轉(zhuǎn)義字符:
轉(zhuǎn)義字符是單個(gè)字符, 為讓 Python 知道下一個(gè)字符是特殊字符, 必須使用 \,但在計(jì)算字符串的長度時(shí),并不將 \ 視為額外的字符。例如:
在使用轉(zhuǎn)義字符時(shí),還有一點(diǎn)需要特別注意的是:在表示文本行末尾方面,不同操作系統(tǒng)遵循的標(biāo)準(zhǔn)是不同的。Windows 使 用 \r\n 表示行尾,OS X 和 Linux 使用 \n, 而 OS X 之前的 Mac 操作系統(tǒng)使用 \r。
2.1 字符串運(yùn)算
數(shù)字有其標(biāo)準(zhǔn)的運(yùn)算方式,字符串同樣也有著一定的運(yùn)算。下面來看下字符串的運(yùn)算符。
操作符 | 描述 |
+ | 字符串連接 |
* | 重復(fù)輸出字符串 |
[] | 通過索引獲取字符串中字符 |
[ : ] | >截取字符串中的一部分 |
in | 成員運(yùn)算符 - 如果字符串中包含給定的字符返回 True |
not in | 成員運(yùn)算符 - 如果字符串中不包含給定的字符返回 True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思來使用,沒有轉(zhuǎn)義特殊或不能打印的字符。 原始字符串除在字符串的第一個(gè)引號(hào)前加上字母"r"(可以大小寫)以外,與普通字符串有著幾乎完全相同的語法。 |
示例 :
1.x和y分別賦值字符串;
>>> x = "I am coming" >>> y = "Python Language"
3 字符串切片
在 Python 中,可使用切片從字符串中提取子串。要對(duì)字符串執(zhí)行切片操作,可指定兩個(gè)索引:要提取的第一個(gè)字符的索引;要提取的最后一個(gè)字符的索引加 1。例如:
用于切片的索引與用于訪問各個(gè)字符的索引相同:第一個(gè)索引總是為零,而最后一個(gè)索引總是比字符串長度小 1。一般而言,string[begin:end]返回從索 引 begin 到 end-1 的子串。注意:如果 string 是一個(gè)字符串,則要訪問索引 i 對(duì)應(yīng)的字符,可使用 string[i] 或 string[i:i+1]。
3.1 切片方法
如果想要省略字符串的起始索引,Python將假定為0;如果需要省略字符串的終止索引,Python 會(huì)假設(shè)你要提取到字符串末尾。
實(shí)用示例:取值文件名中的擴(kuò)展名。
def get_ext(fname): dot = fname.rfind('.') if dot == -1: # fname 中沒有 return '' else: return fname[dot + 1:]
注意第一處標(biāo)紅需要加引號(hào)好,第二處輸入的文件名沒有擴(kuò)展名,故沒有返回值。該函數(shù)的實(shí)現(xiàn)過程:確定最右邊的 '.' 的索引(因此使用 rfind 從右往左查 找);如果 fname 不包含 '.',則返回一個(gè)空字符串,否則返回 '.' 后面的所有字符。
在索引字符串時(shí)所講述的正向、負(fù)向索引同樣可以應(yīng)用于切片中。
使用負(fù)數(shù)索引時(shí),這樣做通常會(huì)有所幫助:將字符串寫到紙上,再標(biāo)出每個(gè)字符的正索引和負(fù)索引,就像圖 1-1 那樣。雖然這樣做確實(shí)需要多用一兩分鐘時(shí)間,但可以很好地避免常見的索引錯(cuò)誤。
4 字符串格式化
Python 支持格式化字符串的輸出 。這會(huì)用到一個(gè)較為復(fù)雜的表達(dá)式,但最基本的用法是將一個(gè)值插入到一個(gè)有字符串格式符 %s 的字符串中。
>>> print("我最喜歡的食物是%s,它的熱量是%d千焦" %('hot dog',3500)) 我最喜歡的食物是hot dog,它的熱量是3500千焦
我們將python字符串格式化符號(hào)整理如下:標(biāo)紅為字符串格式化中的輔助指令
符 號(hào) | 描述 |
%c | 格式化字符及其ASCII碼 |
%s | 格式化字符串 |
%d | 格式化整數(shù) |
%u | 格式化無符號(hào)整型 |
%o | 格式化無符號(hào)八進(jìn)制數(shù) |
%x | 格式化無符號(hào)十六進(jìn)制數(shù) |
%X | 格式化無符號(hào)十六進(jìn)制數(shù)(大寫) |
%f | 格式化浮點(diǎn)數(shù)字,可指定小數(shù)點(diǎn)后的精度 |
%e | 用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù) |
%E | 作用同%e,用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù) |
%g | %f和%e的簡(jiǎn)寫 |
%G | %F 和 %E 的簡(jiǎn)寫 |
%p | 用十六進(jìn)制數(shù)格式化變量的地址 |
* | 定義寬度或者小數(shù)點(diǎn)精度 |
- | 用做左對(duì)齊 |
+ | 在正數(shù)前面顯示加號(hào)( + ) |
<sp> | 在正數(shù)前面顯示空格 |
# | 在八進(jìn)制數(shù)前面顯示零('0'),在十六進(jìn)制前面顯示'0x'或者'0X'(取決于用的是'x'還是'X') |
0 | 顯示的數(shù)字前面填充'0'而不是默認(rèn)的空格 |
% | '%%'輸出一個(gè)單一的'%' |
(var) | 映射變量(字典參數(shù)) |
m.n. | m 是顯示的最小總寬度,n 是小數(shù)點(diǎn)后的位數(shù)(如果可用的話) |
示例:
對(duì)于Python字符串格式化的輸出,可以通過上述幾個(gè)例子體驗(yàn)一下字符串區(qū)別與基本使用。Python本身已經(jīng)自帶了許多很有用的函數(shù)模塊,簡(jiǎn)化了字符串的使用,增強(qiáng)了其功能。后面,我們會(huì)對(duì)Python的字符串函數(shù)以及正則使用做較為詳細(xì)的闡述。
總結(jié)
到此這篇關(guān)于Python中字符串的基本使用的文章就介紹到這了,更多相關(guān)Python字符串使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手帶你用Python實(shí)現(xiàn)一個(gè)計(jì)時(shí)器
雖然Python是一種有效的編程語言,但純Python程序比C、Rust和Java等編譯語言中的對(duì)應(yīng)程序運(yùn)行得更慢,為了更好地監(jiān)控和優(yōu)化Python程序,今天將為大家介紹如何使用?Python?計(jì)時(shí)器來監(jiān)控程序運(yùn)行的速度,以便正對(duì)性改善代碼性能2022-06-06Python預(yù)測(cè)2020高考分?jǐn)?shù)和錄取情況
這篇文章主要介紹了Python預(yù)測(cè)2020高考分?jǐn)?shù)和錄取情況可能是這樣,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Python+OpenCV實(shí)現(xiàn)信用卡數(shù)字識(shí)別的方法詳解
這篇文章主要介紹了如何利用python?opencv實(shí)現(xiàn)信用卡數(shù)字識(shí)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09深入理解Python虛擬機(jī)中復(fù)數(shù)(complex)的實(shí)現(xiàn)原理及源碼剖析
在本篇文章當(dāng)中主要給大家介紹在 cpython 虛擬機(jī)當(dāng)中是如何實(shí)現(xiàn) 復(fù)數(shù) complex 這個(gè)數(shù)據(jù)類型的,這個(gè)數(shù)據(jù)類型在 cpython 當(dāng)中一應(yīng)該是一個(gè)算比較簡(jiǎn)單的數(shù)據(jù)類型了,非常容易理解2023-03-03python實(shí)現(xiàn)n個(gè)數(shù)中選出m個(gè)數(shù)的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)n個(gè)數(shù)中選出m個(gè)數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python編寫電話薄實(shí)現(xiàn)增刪改查功能
這篇文章主要為大家詳細(xì)介紹了Python編寫電話薄實(shí)現(xiàn)增刪改查功能的相關(guān)資料,感興趣的朋友可以參考一下2016-05-05