Python【從入門到精通】_字符串的小操作

彭于晏

str()實現(xiàn)數(shù)字轉(zhuǎn)型字符串

str()可以幫助我們將其他數(shù)據(jù)類型轉(zhuǎn)換為字符串裙秋。例如:

str(5.20) ==> ‘5.20’ str(3.14e2)==>’314.0’ str(True) ==> ‘True’

當我們調(diào)用 print()函數(shù)時,解釋器自動調(diào)用了 str()將非字符串的對象轉(zhuǎn)成了字符串。

使用[]提取字符

字符串的本質(zhì)就是字符序列,我們可以通過在字符串后面添加[],在[]里面指定偏移量,可以提取該位置的單個字符。

正向搜索:
最左側(cè)第一個字符矮慕,偏移量是 0,第二個偏移量是 1啄骇,以此類推痴鳄。直到 len(str)-1為止。

反向搜索:
最右側(cè)第一個字符缸夹,偏移量是-1夏跷,倒數(shù)第二個偏移量是-2,以此類推明未,直到-len(str)為止槽华。

【操作】使用[]提取字符串中的字符

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[0]
'a'
>>> a[3]
'd'
>>> a[26-1]
'z'
>>> a[-1]
'z'
>>> a[-26]
'a'
>>> a[-30]
Traceback (most recent call last):
File "<pyshell#91>", line 1, in <module>
a[-30]
IndexError: string index out of range

replace()實現(xiàn)字符串替換

字符串是“不可改變”的,我們通過[]可以獲取字符串指定位置的字符趟妥,但是我們不能改變
字符串猫态。我們嘗試改變字符串中某個字符,發(fā)現(xiàn)報錯了:

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[3]='高'
Traceback (most recent call last):
File "<pyshell#94>", line 1, in <module>
a[3]='高'
TypeError: 'str' object does not support item assignment

字符串不可改變披摄。但是亲雪,我們確實有時候需要替換某些字符。這時疚膊,只能通過創(chuàng)建新的字符串來實現(xiàn)义辕。

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('c','高')
'ab 高 defghijklmnopqrstuvwxyz'

整個過程中,實際上我們是創(chuàng)建了新的字符串對象寓盗,并指向了變量 a灌砖,而不是修改了以前的字符串。 內(nèi)存圖如下:


圖示

字符串切片 slice 操作

切片 slice 操作可以讓我們快速的提取子字符串傀蚌。標準格式為:
[起始偏移量 start:終止偏移量 end:步長 step]
典型操作(三個量為正數(shù)的情況)如下:


slice 操作1

其他操作(三個量為負數(shù))的情況:


slice 操作2

切片操作時基显,起始偏移量和終止偏移量不在[0,字符串長度-1]這個范圍,也不會報錯善炫。起始
偏移量小于 0 則會當做 0撩幽,終止偏移量大于“長度-1”會被當成-1。例如:
>>> "abcdefg"[3:50]
'defg'

我們發(fā)現(xiàn)正常輸出了結(jié)果箩艺,沒有報錯窜醉。
【操作】

  1. 將”to be or not to be”字符串倒序輸出
>>> "to be or not to be"[::-1]
'eb ot ton ro eb ot'
  1. 將”gcsgcsgcsgcsgcs”字符串中所有的 s 輸出
>>> "gcsgcsgcsgcsgcs"[2:-1:3]
'ssss'

split()分割和 join()合并

split()可以基于指定分隔符將字符串分隔成多個子字符串(存儲到列表中)宪萄。如果不指定分隔
符,則默認使用空白字符(換行符/空格/制表符)榨惰。示例代碼如下:

>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']

join()的作用和 split()作用剛好相反拜英,用于將一系列子字符串連接起來。示例代碼如下:

>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'

拼接字符串要點:

使用字符串拼接符+读串,會生成新的字符串對象聊记,因此不推薦使用+來拼接字符串撒妈。推薦
使用 join 函數(shù)恢暖,因為 join 函數(shù)在拼接字符串之前會計算所有字符串的長度,然后逐一拷貝狰右,
僅新建一次對象杰捂。
【操作】測試+拼接符和 join(),不同的效率 (demo004.py)

import time
time01 = time.time() #起始時刻
a = ""
for i in range(1000000):
    a += "gcs"
time02 = time.time() #終止時刻
print("運算時間:"+str(time02-time01))
time03 = time.time() #起始時刻
li = []
for i in range(1000000):
    li.append("gcs")
a = "".join(li)
time04 = time.time() #終止時刻
print("運算時間:"+str(time04-time03))
結(jié)果展示

即:+效率大于join()

字符串駐留機制和字符串比較

字符串駐留:僅保存一份相同且不可變字符串的方法棋蚌,不同的值被存放在字符串駐留池中嫁佳。
Python 支持字符串駐留機制,對于符合標識符規(guī)則的字符串(僅包含下劃線(_)谷暮、字母
和數(shù)字)會啟用字符串駐留機制駐留機制蒿往。

>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True

字符串比較和同一性

我們可以直接使用==,!=對字符串進行比較,是否含有相同的字符湿弦。

我們使用 is / not is瓤漏,判斷兩個對象是否同一個對象。比較的是對象的地址颊埃,即 id(obj1)是否和 id(obj2)相等蔬充。

成員操作符

in /not in 關(guān)鍵字,判斷某個字符(子字符串)是否存在于字符串中班利。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饥漫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子罗标,更是在濱河造成了極大的恐慌庸队,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯割,死亡現(xiàn)場離奇詭異皿哨,居然都是意外死亡,警方通過查閱死者的電腦和手機纽谒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門证膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鼓黔,你說我怎么就攤上這事央勒〔患” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵崔步,是天一觀的道長稳吮。 經(jīng)常有香客問我,道長井濒,這世上最難降的妖魔是什么灶似? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮瑞你,結(jié)果婚禮上酪惭,老公的妹妹穿的比我還像新娘。我一直安慰自己者甲,他們只是感情好春感,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虏缸,像睡著了一般鲫懒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刽辙,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天窥岩,我揣著相機與錄音宰缤,去河邊找鬼颂翼。 笑死撵溃,一個胖子當著我的面吹牛疚鲤,可吹牛的內(nèi)容都是我干的缘挑。 我是一名探鬼主播集歇,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼语淘!你這毒婦竟也來了诲宇?” 一聲冷哼從身側(cè)響起惶翻,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤姑蓝,失蹤者是張志新(化名)和其女友劉穎吕粗,沒想到半個月后纺荧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年宙暇,在試婚紗的時候發(fā)現(xiàn)自己被綠了输枯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片占贫。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡桃熄,死狀恐怖型奥,靈堂內(nèi)的尸體忽然破棺而出瞳收,到底是詐尸還是另有隱情,我是刑警寧澤螟深,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站血崭,受9級特大地震影響卧惜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咽瓷,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一设凹、第九天 我趴在偏房一處隱蔽的房頂上張望茅姜。 院中可真熱鬧,春花似錦钻洒、人聲如沸奋姿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽头遭。三九已至寓免,卻和暖如春计维,著一層夾襖步出監(jiān)牢的瞬間袜香,已是汗流浹背鲫惶。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欢策。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像猬腰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姑荷,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 《Java從小白到大盘硭拢》紙質(zhì)版已經(jīng)上架了P阜选<坡丁憎乙! 由字符組成的一串字符序列票罐,稱為“字符串”泞边,在前面的章節(jié)中也多次用到...
    tony關(guān)東升閱讀 820評論 0 2
  • 一该押、字符串在C#中阵谚,字符串是一系列不可修改的Unicode字符蚕礼,創(chuàng)建字符串后梢什,就不能修改它奠蹬。要創(chuàng)建字符串,最常用的...
    CarlDonitz閱讀 1,287評論 0 2
  • 或許是真的抓的太累了吧囤躁,今天看了個帖子之后,我突然翼馆,騰!的一下就放手了..... 我只預設(shè)了時間应媚,2周之內(nèi)严沥,...
    貓公主喵閱讀 158評論 0 1
  • 導讀:《曾有一個人,愛我如生命》這本感動8000萬讀者的初戀紀念讀物翩瓜。獻給依然相信愛的善良人們! 年少時兔跌,以為愛能...
    課后輔導陳老師閱讀 782評論 0 0
  • 周五是我們KPI認定的最后一天勘高,吃過晚飯坟桅,坐在那里华望,搞到九點半左右仅乓,吭哧半天的功夫赖舟,寫了一篇不到500字的工具安利...
    ShineaSYR閱讀 138評論 0 1