Python的字符串示例講解
之前我們學(xué)習(xí)過(guò)一個(gè)不可變的序列叫元組,今天我們探討的字符串,也是一個(gè)不可變序列。
1. 字符串的創(chuàng)建
一個(gè)概念: 字符串的駐留機(jī)制
那什么是字符串的駐留機(jī)制呢?
意思是: 僅保留一份相同且不可變字符串的方法,不同的值被存放在字符串的駐留池中,python的駐留機(jī)制對(duì)相同的字符串只保留一份拷貝,后續(xù)創(chuàng)建相同字符串時(shí)候,不會(huì)開(kāi)辟新的空間,而是把該字符串的地址重新賦值給新建的變量。
1) 字符串的定義
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s a='itlaoxin' b="itlaoxin" c='''itlaoxiin''' print(a,b,c,id(a),id(b),id(c))
輸出結(jié)果
可以看到ID都是一樣的。
在內(nèi)存中只有一份
幾點(diǎn)注意事項(xiàng):
在交互模式下,能實(shí)現(xiàn)駐留機(jī)制的情況:
- 字符串的長(zhǎng)度為0 或者1時(shí)
- 符合標(biāo)識(shí)符的字符串
- 字符串只在編譯時(shí)候進(jìn)行駐留,而非運(yùn)行時(shí)
- 【-5,256】之間的整數(shù)數(shù)字
2. 字符串的常用操作
關(guān)于字符串的操作,我們可以把字符串看成是關(guān)于字符的列表:
1) 查詢(xún)操作
- index() 查找字符串substr第一次出現(xiàn)的位置,如果查找的子串不存在,拋出異常
- rindex() 查找字符串substr最后一次出現(xiàn)的問(wèn)題,如果不存在,則報(bào)異常
- find() 查找子串substr第一次出現(xiàn)的位置,不存在返回-1
- rfind 查找子串substr最后一次出現(xiàn)的位置,若不存在返回 -1
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s='hello,world' print(s.index('l')) #2 print(s.find('l')) #2 print(s.rfind('l')) #9 print(s.rindex('l')) #9
這里建議大家使用find,或者rfind,因?yàn)椴粫?huì)報(bào)異常
2) 字符串的常用操作
a) 大小寫(xiě)轉(zhuǎn)換
- upper() 把字符串中所有的字符都轉(zhuǎn)化成大寫(xiě)字母(會(huì)產(chǎn)生新的字符串對(duì)象)
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" a=s.upper() print(s) print(a)
- lower() 把字符串中所有的字符都轉(zhuǎn)換成小寫(xiě)字母
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" a=s.lower() print(s) print(a)
輸出結(jié)果:
hello,ITlaoxin
hello,itlaoxin
swapcase() 把字符串中所有的大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,把所有的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" a=s.swapcase() print(a,id(a)) print(s,id(s))
- capitalize() 把第一個(gè)字符轉(zhuǎn)換成大寫(xiě),把其余的字符轉(zhuǎn)換成小寫(xiě)
- tilele( )把每個(gè)單詞的第一個(gè)字符轉(zhuǎn)換成大寫(xiě),把每個(gè)讀單詞的剩余字符轉(zhuǎn)換成小寫(xiě)
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" a=s.title() print(a)
b) 字符串內(nèi)容對(duì)齊操作
- center() 居中對(duì)齊
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" print(s.center(20,'*'))
一共14個(gè)字符,定義20個(gè)字符,左右各三個(gè)
- ljust() 左對(duì)齊
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" print(s.ljust(20,"*"))
如果不寫(xiě)* ,默認(rèn)是空格
- rjust 右對(duì)齊
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" print(s.rjust(20,"*"))
- zfill 右對(duì)齊
這種方式會(huì)用0填充
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" print(s.zfill(20))
c) 字符串的拆分
- split() 分割,從左邊開(kāi)始,默認(rèn)的分割符是空格,分割完后是列表
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello,ITlaoxin" lst=s.split() print(lst)
輸出結(jié)果:
我們可以指定分割符,用sep=‘|' 的形式
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello|ITlaoxin|gaosh" lst=s.split(sep='|') print(lst)
輸出結(jié)果
['hello,ITlaoxin']
如果這個(gè)地方我們用默認(rèn)的空格會(huì)是什么結(jié)果:
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello|ITlaoxin|gaosh" lst=s.split() print(lst)
結(jié)果
['hello|ITlaoxin|gaosh']
可以看到,因?yàn)檫@個(gè)字符串中沒(méi)有空格,所以他就是一個(gè)元素的列表。
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello|ITlaoxin|gaosh" lst=s.split(sep='|',maxsplit=1) print(lst)
結(jié)果:
['hello', 'ITlaoxin|gaosh']
這里只拆分了一次。
- rsplit() 從字符右邊開(kāi)始拆分,默認(rèn)拆分字符是空格,返回值是一個(gè)列表
maxsplit可以指定最大拆分次數(shù)
這個(gè)和split的使用方法一樣,只是rsplist是從右邊開(kāi)始拆分,splist從左邊拆分
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s="hello|ITlaoxin|gaosh" lst=s.split(sep='|',maxsplit=1) print(lst) lst1=s.rsplit(sep='|',maxsplit=1) print(lst1)
結(jié)果如圖所示:
d) 字符串的判斷方法
- isidentifier() 判斷指定的字符串是否是合法的標(biāo)識(shí)符
- isspace() 判斷指定的字符串是否全部由空白字符組成(回車(chē),換行,水平指制表符)
- issalpha() 判斷字符串是否全部由字母組成
- isdecimal( )判斷指定字符串是否全部是十進(jìn)制組成
- isnumeric() 判斷指定的字符串全部由數(shù)字組成
- isalnum()判斷指定字符串是否全部由字母和數(shù)字組成
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s='hello,world,python' print('1',s.isidentifier()) print('2','hello'.isidentifier()) print('3','\t'.isidentifier()) print('4','abc'.isspace()) print('5','abc'.isalpha()) print('6','1'.isspace()) print('7','123'.isnumeric()) print('8','abc123'.isalnum()) print('9','123abc!'.isalnum())
e) 字符串的其他操作 字符串的替換replace()
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s s='hello,world,python' print(s.replace('python','itlaoxin')) s1='hello,python,python ,python' print(s1.replace('python','itlaoxin',2))
結(jié)果:
hello,world,itlaoxin
hello,itlaoxin,itlaoxin ,python
字符串的合并 join()
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s lst=['hello','java','python'] print('|'.join(lst))
結(jié)果:hello|java|python
f) 字符串的比較
使用運(yùn)算符 >,>= ,<,<= ,= ,!=
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s print('1','itlaoxin'>'laoxin') print('2','itlaoxin'>'itlaox')
結(jié)果:
False
True
如果第一個(gè)字母就不相同,就比較原始值 ord()
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s print('1','itlaoxin'>'laoxin') print('2','itlaoxin'>'itlaox') print('3','python'>'java') ## 相當(dāng)于 print(ord('p'),ord('j'))
第三個(gè)相當(dāng)于112與106比較
g) 字符串的切片
字符串是不可變類(lèi)型,不具備增刪改查的操作,切片是會(huì)產(chǎn)生新的對(duì)象的
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s a='hello,world,itlaoxin' print(a[:5])
輸出結(jié)果:
hello
不寫(xiě)起始位置,它會(huì)從index0開(kāi)始切
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s a='hello,world,itlaoxin' print(a[6:]) #world,itlaoxin
沒(méi)有指定結(jié)束位置,會(huì)切到最后
step是指定步長(zhǎng)
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s a='hello,world,itlaoxin' print(a[1:8:2]) #el,o
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s a='hello,world,itlaoxin' print(a[1:8:2]) print(a[::2]) #hlowrdiloi
h) 格式化字符串
為什么要格式化字符串呢?
字符串的拼接會(huì)產(chǎn)生新的Id,會(huì)造成空間浪費(fèi), 這個(gè)時(shí)候就需要使用字符串的格式化。
格式化字符串的兩種方式:
% 做占位符
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s #第一種方式% name='互聯(lián)網(wǎng)老辛' age=40 print('我叫%s,今年%d歲了'%(name,age))
{} 做占位符
要使用到format()方法
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s #第一種方式% name='互聯(lián)網(wǎng)老辛' age='40' print('我叫{0},今年{1}歲了'.format(name,age))
除此之外還可以表示精讀和寬度:
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s print('%d'% 99) print('%10d'% 99)
這里的10表示的就是寬度
精度:
保留3位小數(shù)
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s print('%.3f' % 3.11516)
混合使用:
# 作者:互聯(lián)網(wǎng)老辛 # 開(kāi)發(fā)時(shí)間:2021/4/4/0004 6s print('%10.3f' % 3.11516)
%10.3f
總寬度為10,小數(shù)點(diǎn)保留3位
總結(jié)
到現(xiàn)在所有的數(shù)據(jù)類(lèi)型的基本操作就介紹完了,這些應(yīng)該都算是基礎(chǔ),接下來(lái)我們要進(jìn)入到函數(shù)的章節(jié)。
到此這篇關(guān)于Python的字符串示例講解的文章就介紹到這了,更多相關(guān)Python的字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+OpenCV六種實(shí)時(shí)圖像處理詳細(xì)講解
OpenCV常用的圖像處理為閾值二值化、邊緣檢測(cè)、輪廓檢測(cè)、高斯濾波、色彩轉(zhuǎn)換、調(diào)節(jié)對(duì)比度。本文主要介紹了利用Python和OpenCV對(duì)實(shí)時(shí)圖像進(jìn)行上述六種操作的詳細(xì)講解,感興趣的可以了解一下。2021-11-11pyspark 讀取csv文件創(chuàng)建DataFrame的兩種方法
今天小編就為大家分享一篇pyspark 讀取csv文件創(chuàng)建DataFrame的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python實(shí)現(xiàn)讀取文本文件并轉(zhuǎn)換為pdf
這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)便快捷地完成TXT文件到PDF文檔的轉(zhuǎn)換,滿足多樣化的文檔處理需求,感興趣的小伙伴可以參考下2024-04-04用Python編寫(xiě)生成樹(shù)狀結(jié)構(gòu)的文件目錄的腳本的教程
這篇文章主要介紹了用Python編寫(xiě)生成樹(shù)狀結(jié)構(gòu)的文件目錄的腳本的教程,是一個(gè)利用os模塊下各函數(shù)的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下2015-05-05Python?pandas?DataFrame數(shù)據(jù)拼接方法
我們都知道在使用pandas處理數(shù)據(jù)的時(shí)候,往往會(huì)需要合并兩個(gè)或者多個(gè)DataFrame的操作,下面這篇文章主要給大家介紹了關(guān)于Python?pandas?DataFrame數(shù)據(jù)拼接方法的相關(guān)資料,需要的朋友可以參考下2022-07-07Python編程中對(duì)super函數(shù)的正確理解和用法解析
可能有人會(huì)想到,Python中既然可以直接通過(guò)父類(lèi)名調(diào)用父類(lèi)方法為什么還會(huì)存在super函數(shù)?其實(shí),很多人對(duì)Python中的super函數(shù)的認(rèn)識(shí)存在誤區(qū),本文我們就帶來(lái)在Python編程中對(duì)super函數(shù)的正確理解和用法解析2016-07-07Python畫(huà)圖學(xué)習(xí)入門(mén)教程
這篇文章主要介紹了Python畫(huà)圖的方法,結(jié)合實(shí)例形式分析了Python基本的線性圖、餅狀圖等繪制技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07