主要內(nèi)容為字符串,包括字符串的切片、格式字符串、字符串內(nèi)置函數(shù)的使用等內(nèi)容。
一、字符串
容器是一種可以存儲(chǔ)對(duì)象的對(duì)象,常見(jiàn)的容器有序列、映射和集合
字符串就是一種序列,且是不可變的有序序列
轉(zhuǎn)義字符
1、特定意義的字符(例如:\n,\t,\f,\b ......)
2、在字符串的最前面可以添加r或者R來(lái)阻止字符串中的轉(zhuǎn)義字符轉(zhuǎn)義
str1="how are you \n fine"
print(str1)
str2=r"how are you \n fine"
print(str2)
獲取字符
語(yǔ)法:字符串[下標(biāo)] --根據(jù)下標(biāo)獲取字符串中的字符
str3="good good study\n day day up!"#轉(zhuǎn)義字符是一個(gè)字符
str4=" good good study\n day day up!"#制表符是一個(gè)字符
print(str3[-11],str3[17])
print(str4[-11],str4[18])
字符串切片
語(yǔ)法:
字符串[起始下標(biāo):結(jié)束下標(biāo)]--獲取字符串中從起始下標(biāo)開始,到結(jié)束下標(biāo)前所有字符
字符串[起始下標(biāo):結(jié)束下標(biāo):步長(zhǎng)]--從起始下標(biāo)開始,每步長(zhǎng)獲取一個(gè),獲取到結(jié)束下標(biāo)前為止
字符串[:結(jié)束下標(biāo)]--從開頭開始取(可是從第一個(gè),也可是從最后一個(gè))
字符串[:]--全部取完
注意:切片的時(shí)候下標(biāo)可以越界
str5="同一個(gè)世界,同一個(gè)夢(mèng)想"
print(str5[2:6],str5[6:-1])
str6="尤文圖斯、拜仁慕里黑、皇家馬德里、利物浦、巴黎圣日耳曼"
print(str6[1:10:2],str6[10:1:-2])
str7="落霞與孤鶩齊飛,秋水共長(zhǎng)天一色"
print(str7[:4],str7[:6:-2])
print(str7[-4:],str7[-4::-2])
print(str7[:],str7[::-1])
字符串運(yùn)算
Python中的字符串支持+、*和比較運(yùn)算符
(1)加運(yùn)算
加號(hào)兩邊不能一個(gè)是字符串,另一個(gè)是數(shù)字
str1="落霞與孤鶩齊飛"
str2="秋水共長(zhǎng)天一色"
print(str1+','+str2) #落霞與孤鶩齊飛,秋水共長(zhǎng)天一色
(2)乘運(yùn)算
str3="abc"
str4="123"
print(str3*3) #abcabcabc
print(str3*3+str4) #先算乘,再算加 abcabcabc123
(3)比較運(yùn)算
print('abc'=='abc','abc'!='acd')#判斷相等
print("a"==chr(97),"a"=="\u0061")#判斷相等
print('abcd'>'op',ord('a')>ord('o')) #比較大小:按序列比較字符的Unicode碼值
print('abc' in 'abcded','abc'in 'beabce','abc' not in 'abeced')#判斷字符串的包含關(guān)系
#判斷一個(gè)字符是否是數(shù)字字符:利用Unicode表和ASCII表
char='5'
print('0'<=char<='9') #判斷char是否是數(shù)字
print('a'<=char<='z' or 'A'<=char<='Z') #判斷char是否是字母
(4)字符串包含關(guān)系:in 、not in
name='albert einstein is a very great great scientist'
substring='albert'
print(substring not in name,substring in name) #False True
格式字符串
在字符串的內(nèi)部通過(guò)格式占位符表示字符串變化的部分,然后在后面用值來(lái)填充變化的部分
1、百分號(hào)方式
格式:%[(name)][flags][width].[precision]typecode
- (name) 可選,用于選擇指定的key
- flags 可選,可供選擇的值有:右對(duì)齊(+):正數(shù)的加正號(hào),負(fù)數(shù)的加負(fù);左對(duì)齊(-):正數(shù)前沒(méi)有負(fù)號(hào),負(fù)數(shù)前加負(fù)號(hào)
- width 可選,占有寬度
- .precision 可選,小數(shù)點(diǎn)后保留的位數(shù)
- typecode 必選
s,獲取傳入的對(duì)象_str_方法的返回值,并將其格式化到指定位置
r,獲取傳入對(duì)象的_repr_方法的返回值,并將其格式化到指定位置
c,整數(shù):將數(shù)字轉(zhuǎn)換成其unicode對(duì)應(yīng)的值,10進(jìn)制范圍為0 <= i <=1114111
o,將整數(shù)轉(zhuǎn)換成八進(jìn)制表示,并將其格式化到指定位置
x,將整數(shù)轉(zhuǎn)換成16進(jìn)制,并將其格式化到指定位置
d,將整數(shù),浮點(diǎn)數(shù)轉(zhuǎn)化為十進(jìn)制表示,并將其格式化到指定位置
字符串格式化符號(hào).png
name='小明'
age=22
salary=12.688
height=170
weight=72
addr="四川省成都市科華北路62號(hào)"
print("%s 的年齡是%d歲,身高是%dkg,體重是%dcm,年收入是%f萬(wàn)元,家庭住址是%s" % (name,age,height,weight,salary,addr))
print("%s 的年收入是%-10.2f元"%(name,salary))
2、format方式
name='xiaoming'
age=22
salary=12.688
#三種方式
str1='name is {name},age is {age},salary is {salary}'.format(name=name,age=age,salary=salary)
str2='name is {},age is {}, salary is {}'.format(name,age,salary)
str3='name is {0},age is{1}, salary is {2},the most important thing is salary is {2}'.format(name,age,salary)
print(str1,"\n",str2,"\n",str3, sep= '')
str4='name is {name:s},age is {age:d},salary is {salary:$>6.2f}'.format(name=name,age=age,salary=salary)
#$>6.2f:用$填充,右對(duì)齊,寬度為6,精度為2
#左對(duì)齊、右對(duì)齊和居中可分別使用<、 >和^
#$表示用$符號(hào)填充
print(str4, sep= '')
內(nèi)置函數(shù)
(1)字母處理類:有返回值
.upper() # 全部大寫
.lower() # 全部小寫
.swapcase() # 大小寫互換
.capitalize() # 首字母大寫,其余小寫
.title() # 首字母大寫
name='albert einstein'
print(name.upper(),name.lower(),name.capitalize(),name.title(),name.swapcase(), sep=',')
(2)調(diào)整格式類
.ljust(width,fill) # 獲取固定長(zhǎng)度,左對(duì)齊,右邊不夠用fill值補(bǔ)齊
.rjust(width,fill) # 獲取固定長(zhǎng)度,右對(duì)齊,左邊不夠用fill值補(bǔ)齊
.center(width,fill) # 獲取固定長(zhǎng)度,中間對(duì)齊,兩邊不夠用fill值補(bǔ)齊
.zfill(width) # 獲取固定長(zhǎng)度,右對(duì)齊,左邊不足用0補(bǔ)齊
name='albert einstein'
print(name.ljust(20,'*'),name.rjust(20,'*'),name.center(20,'*'),name.zfill(20), sep=',')#zfill()函數(shù)只能有一個(gè)參數(shù)
#albert einstein*****,*****albert einstein,**albert einstein***,00000albert einstein
(3)字符查找類
.find(str, beg=0 end=len(string)) # 搜索指定字符串,沒(méi)有返回-1
.rfind() # 從右邊開始查找
.index() # 同上,但是找不到會(huì)報(bào)錯(cuò)
.rindex() # 從右邊開始,同上,但是找不到會(huì)報(bào)錯(cuò)
.count() # 統(tǒng)計(jì)指定的字符串出現(xiàn)的次數(shù)
startswith()# 以某一個(gè)字符串開始
endswith()# 以某一個(gè)字符串結(jié)束
name='albert einstein is a very great great scientist'
print(len(name)) #47
print(name.find('einstein'),name.find('is'))#7 16
print(name.rfind('einstein'),name.rfind('is'))#7 44
print(name.index('einstein'),name.index('is'))
print(name.rindex('einstein'),name.rindex('is'))
print(name.count('e'),name.count('great'))
print(name.startswith('albert'),name.endswith('ist'))
(4)替換、連接、分割
.join(seq) #將字符串插入到目標(biāo)字符串之間
.split('指定字符') # 按指定字符分割字符串為數(shù)組
.replace('old','new',次數(shù)) # 替換指定次數(shù)的old為new
sep="aaa"
seq="bbb"
print(sep.join(seq)) #baaabaaab
sep="abcabcabcabc"
print(sep.split("c"))#['ab', 'ab', 'ab', 'ab', '']
print(sep.replace('ab','ad',2)) #adcadcabcabc
(5)去空格
.strip() # 去兩邊空格
.lstrip() # 去左邊空格
.rstrip() # 去右邊空格
str.strip([chars]) 用于移除字符串頭尾指定的字符(默認(rèn)為空格)或字符序列
name='\t Albert Einstein\t\n'
print(name)
a=name.strip()
print(a) #Albert Einstein
b=name.rstrip()
b=name.lstrip()
print(b) #Albert Einstein
(6)判斷
.isalnum() # 是否全為字母或數(shù)字
.isalpha() # 是否全字母
.isdigit() # 是否全數(shù)字
.islower() # 是否全小寫
.isupper() # 是否全大寫
.istitle() # 判斷首字母是否為大寫
.isspace() # 判斷字符是否為空格
=========================================================
isdigit()、isdecimal()、isnumeric()的區(qū)別
都不能判斷小數(shù)-->'12.55' --False
isdigit()
True: Unicode數(shù)字,byte數(shù)字(單字節(jié)),全角數(shù)字(雙字節(jié)),羅馬數(shù)字
False: 漢字?jǐn)?shù)字
Error: 無(wú)
isdecimal()
True: Unicode數(shù)字,,全角數(shù)字(雙字節(jié))
False: 羅馬數(shù)字,漢字?jǐn)?shù)字
Error: byte數(shù)字(單字節(jié))
isnumeric()
True: Unicode數(shù)字,全角數(shù)字(雙字節(jié)),羅馬數(shù)字,漢字?jǐn)?shù)字
False: 無(wú)
Error: byte數(shù)字(單字節(jié))
=========================================================