目錄
- 1. 字符串的創(chuàng)建
- 2. 字符串的常用操作
- 1) 查詢操作
- a) 大小寫轉換
- b) 字符串內容對齊操作
- c) 字符串的拆分
- d) 字符串的判斷方法
- 2) 字符串的常用操作
- 總結
之前我們學習過一個不可變的序列叫元組,今天我們探討的字符串,也是一個不可變序列。
1. 字符串的創(chuàng)建
一個概念: 字符串的駐留機制
那什么是字符串的駐留機制呢?
意思是: 僅保留一份相同且不可變字符串的方法,不同的值被存放在字符串的駐留池中,python的駐留機制對相同的字符串只保留一份拷貝,后續(xù)創(chuàng)建相同字符串時候,不會開辟新的空間,而是把該字符串的地址重新賦值給新建的變量。
1) 字符串的定義
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
a='itlaoxin'
b="itlaoxin"
c='''itlaoxiin'''
print(a,b,c,id(a),id(b),id(c))
輸出結果
可以看到ID都是一樣的。
在內存中只有一份
幾點注意事項:
在交互模式下,能實現(xiàn)駐留機制的情況:
- 字符串的長度為0 或者1時
- 符合標識符的字符串
- 字符串只在編譯時候進行駐留,而非運行時
- 【-5,256】之間的整數(shù)數(shù)字
2. 字符串的常用操作
關于字符串的操作,我們可以把字符串看成是關于字符的列表:
1) 查詢操作
- index() 查找字符串substr第一次出現(xiàn)的位置,如果查找的子串不存在,拋出異常
- rindex() 查找字符串substr最后一次出現(xiàn)的問題,如果不存在,則報異常
- find() 查找子串substr第一次出現(xiàn)的位置,不存在返回-1
- rfind 查找子串substr最后一次出現(xiàn)的位置,若不存在返回 -1
# 作者:互聯(lián)網老辛
# 開發(fā)時間: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,因為不會報異常
2) 字符串的常用操作
a) 大小寫轉換
- upper() 把字符串中所有的字符都轉化成大寫字母(會產生新的字符串對象)
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
a=s.upper()
print(s)
print(a)
- lower() 把字符串中所有的字符都轉換成小寫字母
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
a=s.lower()
print(s)
print(a)
輸出結果:
hello,ITlaoxin
hello,itlaoxin
swapcase() 把字符串中所有的大寫字母轉換成小寫字母,把所有的小寫字母轉換成大寫字母
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
a=s.swapcase()
print(a,id(a))
print(s,id(s))
- capitalize() 把第一個字符轉換成大寫,把其余的字符轉換成小寫
- tilele( )把每個單詞的第一個字符轉換成大寫,把每個讀單詞的剩余字符轉換成小寫
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
a=s.title()
print(a)
b) 字符串內容對齊操作
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
print(s.center(20,'*'))
一共14個字符,定義20個字符,左右各三個
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
print(s.ljust(20,"*"))
如果不寫* ,默認是空格
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
print(s.rjust(20,"*"))
這種方式會用0填充
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
print(s.zfill(20))
c) 字符串的拆分
- split() 分割,從左邊開始,默認的分割符是空格,分割完后是列表
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello,ITlaoxin"
lst=s.split()
print(lst)
輸出結果:
我們可以指定分割符,用sep=‘|' 的形式
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello|ITlaoxin|gaosh"
lst=s.split(sep='|')
print(lst)
輸出結果
['hello,ITlaoxin']
如果這個地方我們用默認的空格會是什么結果:
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello|ITlaoxin|gaosh"
lst=s.split()
print(lst)
結果
['hello|ITlaoxin|gaosh']
可以看到,因為這個字符串中沒有空格,所以他就是一個元素的列表。
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
s="hello|ITlaoxin|gaosh"
lst=s.split(sep='|',maxsplit=1)
print(lst)
結果:
['hello', 'ITlaoxin|gaosh']
這里只拆分了一次。
- rsplit() 從字符右邊開始拆分,默認拆分字符是空格,返回值是一個列表
maxsplit可以指定最大拆分次數(shù)
這個和split的使用方法一樣,只是rsplist是從右邊開始拆分,splist從左邊拆分
# 作者:互聯(lián)網老辛
# 開發(fā)時間: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)
結果如圖所示:
d) 字符串的判斷方法
- isidentifier() 判斷指定的字符串是否是合法的標識符
- isspace() 判斷指定的字符串是否全部由空白字符組成(回車,換行,水平指制表符)
- issalpha() 判斷字符串是否全部由字母組成
- isdecimal( )判斷指定字符串是否全部是十進制組成
- isnumeric() 判斷指定的字符串全部由數(shù)字組成
- isalnum()判斷指定字符串是否全部由字母和數(shù)字組成
# 作者:互聯(lián)網老辛
# 開發(fā)時間: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)網老辛
# 開發(fā)時間: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))
結果:
hello,world,itlaoxin
hello,itlaoxin,itlaoxin ,python
字符串的合并 join()
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
lst=['hello','java','python']
print('|'.join(lst))
結果:hello|java|python
f) 字符串的比較
使用運算符 >,>= ,,= ,= ,!=
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
print('1','itlaoxin'>'laoxin')
print('2','itlaoxin'>'itlaox')
結果:
False
True
如果第一個字母就不相同,就比較原始值 ord()
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
print('1','itlaoxin'>'laoxin')
print('2','itlaoxin'>'itlaox')
print('3','python'>'java')
## 相當于
print(ord('p'),ord('j'))
第三個相當于112與106比較
g) 字符串的切片
字符串是不可變類型,不具備增刪改查的操作,切片是會產生新的對象的
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
a='hello,world,itlaoxin'
print(a[:5])
輸出結果:
hello
不寫起始位置,它會從index0開始切
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
a='hello,world,itlaoxin'
print(a[6:]) #world,itlaoxin
沒有指定結束位置,會切到最后
step是指定步長
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
a='hello,world,itlaoxin'
print(a[1:8:2]) #el,o
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
a='hello,world,itlaoxin'
print(a[1:8:2])
print(a[::2]) #hlowrdiloi
h) 格式化字符串
為什么要格式化字符串呢?
字符串的拼接會產生新的Id,會造成空間浪費, 這個時候就需要使用字符串的格式化。
格式化字符串的兩種方式:
% 做占位符
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
#第一種方式%
name='互聯(lián)網老辛'
age=40
print('我叫%s,今年%d歲了'%(name,age))
{} 做占位符
要使用到format()方法
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
#第一種方式%
name='互聯(lián)網老辛'
age='40'
print('我叫{0},今年{1}歲了'.format(name,age))
除此之外還可以表示精讀和寬度:
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
print('%d'% 99)
print('%10d'% 99)
這里的10表示的就是寬度
精度:
保留3位小數(shù)
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
print('%.3f' % 3.11516)
混合使用:
# 作者:互聯(lián)網老辛
# 開發(fā)時間:2021/4/4/0004 6s
print('%10.3f' % 3.11516)
%10.3f
總寬度為10,小數(shù)點保留3位
總結
到現(xiàn)在所有的數(shù)據(jù)類型的基本操作就介紹完了,這些應該都算是基礎,接下來我們要進入到函數(shù)的章節(jié)。
到此這篇關于Python的字符串示例講解的文章就介紹到這了,更多相關Python的字符串內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python字符串的多行輸出的實例詳解
- python列表和字符串的三種逆序遍歷操作
- python 如何比較字符串是否一樣
- python str()如何將參數(shù)轉換為字符串類型
- 教你怎么用python實現(xiàn)字符串轉日期
- 詳解python字符串駐留技術
- 如何使用python提取字符串的中英文(正則判斷)
- python 如何將帶小數(shù)的浮點型字符串轉換為整數(shù)
- python生成隨機數(shù)、隨機字符、隨機字符串的方法示例
- python如何正確的操作字符串