一.認(rèn)識(shí)字符串
1.什么是字符串
a.用單引號(hào)或者雙引號(hào)括起來(lái)的字符集就是字符串
'assd123~..?按鍵式','98k!'
b.字符串中的每個(gè)單獨(dú)的單元叫字符魁瞪,用鍵盤輸入的济舆,都是字符涩嚣。
’98k!'中的‘9’赃梧,‘8’,‘k’,‘!’就是字符
2.轉(zhuǎn)義字符
- 說明:python中沒有字符類型墩虹,如果要表示字符嘱巾,就用一個(gè)長(zhǎng)度是一的字符串表示,例如:'a','1'
- 長(zhǎng)度:指的是字符串中字符的個(gè)數(shù)诫钓,例如:’abc‘表示長(zhǎng)度是3旬昭,'123, 你好'表示長(zhǎng)度是7(一個(gè)空格,一個(gè)tab菌湃,都表示一個(gè)字符)
a.常見的轉(zhuǎn)義字符:
\n-----換行
\t------制表符(相當(dāng)于tab)
\------,隔開
'------ '
"----- "
在計(jì)算字符串長(zhǎng)度的時(shí)候问拘,轉(zhuǎn)義字符的長(zhǎng)度是1
poem = '床前明月光,\n疑是地上霜'
print (poem)
輸出
床前明月光,
疑是地上霜
st = '12\'25'
print (str)
輸出
12'25
3.Unicode編碼
a.python中字符的編碼采用的是Unicode編碼
b.Unicode是采用兩個(gè)字節(jié)對(duì)一個(gè)字符進(jìn)行編碼(2^15),能夠?qū)⑹澜缟纤械姆?hào)進(jìn)行編碼
c.Unicode編碼中包含ascii碼
-
將字符轉(zhuǎn)換成指定的數(shù)值骤坐,這個(gè)過程就是編碼绪杏。(編碼的目的是方便計(jì)算機(jī)存儲(chǔ)),將數(shù)值轉(zhuǎn)換成對(duì)應(yīng)的符號(hào)的過程就是反編碼(解碼)
1).將Unicode碼轉(zhuǎn)換成字符:chr(編碼)
print(chr(0xA48F)) ?
print(chr(0x4e80)) 亀
2).將字符轉(zhuǎn)換成Unicode編碼:ord(字符)
name1 = '陳'
name2 = '虹'
name3 = '州'
print(ord(name1),ord(name2),ord(name3))
輸出
38472 34425 24030
二纽绍、獲取字符
- 字符串實(shí)質(zhì)是一個(gè)不可變的序列蕾久,序列內(nèi)容是字符。一旦確定字符串拌夏,那么里面的字符和字符位置就不可變了腔彰,例如:'abc'
1.怎么獲取單個(gè)字符
- python中的字符串,可以通過下標(biāo)(索引)來(lái)獲取指定位置上的字符:字符串[索引]
說明:
a.字符串:可以是字符串值辖佣,也可以是字符串變量
b.[]:中括號(hào)是固定語(yǔ)法
c.索引:從0開始到字符串長(zhǎng)度減1;
-1~負(fù)的長(zhǎng)度(-1對(duì)應(yīng)的是最后一個(gè)字符搓逾,-2對(duì)應(yīng)的是倒數(shù)第二個(gè)字符) - 注意:索引不能越界卷谈,否則會(huì)報(bào)錯(cuò)(產(chǎn)生異常)
str = 'abcd' # a-->0,b-->1c-->2,d-->3
print(str[0]) a
name = '123'
print (name[2]) 3
print (name[-3]) 1
print ('123'[2]) 3
2.獲取部分字符(獲取字串) --- 切片
a.字符串[下標(biāo)1:下標(biāo)2] :
從下標(biāo)1開始,獲取到下標(biāo)2前的所有字符,從下標(biāo)1開始霞篡,每次下標(biāo)值加1世蔗,一直加到下標(biāo)2前
- 注意:下標(biāo)1對(duì)應(yīng)的位置,一定要在下標(biāo)2對(duì)應(yīng)的位置前
str1 = 'hello world'
print (str1[0:4]) hell
print (str1[2:7]) llo w
print (str1[2:-1]) llo worl
print (str1[0:13]) 切片時(shí)小標(biāo)可以越界朗兵,越界的時(shí)候就去臨界值
b.字符串[下標(biāo)1:下標(biāo)2:步進(jìn)]:
從下標(biāo)1開始獲取 污淋,每次下標(biāo)值增加步進(jìn)值,每增加一次取一個(gè)字符余掖,直到取到下標(biāo)2為止
- 注意:1).步進(jìn)如果是正數(shù)寸爆,那么下標(biāo)1對(duì)應(yīng)的字符的位置一定要在下標(biāo)2對(duì)應(yīng)的位置的前面;
2).步進(jìn)如果是負(fù)數(shù)盐欺,那么下標(biāo)1字符對(duì)應(yīng)的位置一定要在下標(biāo)2字符對(duì)應(yīng)位置的后面 - 下標(biāo)2對(duì)應(yīng)的字符是取不到的
str2 = 'hellopython'
print (str2[0:5:2]) # hlo
print (str2[-1:5:-2]) # nhy
c.下標(biāo)的省略
切片的時(shí)候赁豆,下標(biāo)1和下標(biāo)2是可以省略的
- 下標(biāo)1省略:默認(rèn)從開頭開始獲取(開頭可能是字符串的第一個(gè)字符冗美,也可能是字符串的最后一個(gè)字符
str3 = 'good good study,day day up'
print (str3[:4]) good
print (str3[:4:-1]) pu yad yad,yduts doog
- 下標(biāo)2省略:從下標(biāo)1位置開始獲取魔种,獲取到結(jié)束(結(jié)束可能是字符串的最后一個(gè)字符,也可能是第一個(gè)字符)
print (str3[1:]) ood good study,day day up
print (str3[3::-1]) doog
print (str3[:]) good good study,day day up
print (str3[::-1]) pu yad yad,yduts doog doog
練習(xí):要求講一個(gè)字符串中所有下標(biāo)是奇數(shù)位上的字符取出來(lái)(位數(shù)從0開始算)
str4 = '0123456789'
print (str4[1::2]) 13579
print (str4[::-2]) 97531
三粉洼、字符串的相關(guān)運(yùn)算
1. + 運(yùn)算符
python支持兩個(gè)字符串的相加节预,其效果就是將兩個(gè)字符串拼接在一起,產(chǎn)生一個(gè)新的字符串
- 注意:如果+的一邊是字符串属韧,那么另外一邊也必須是字符串
print ('123' + 'abc')
str1 = 'world'
newstr = 'hello' + ' ' + str1
print (newstr)
print(10 + 'abc') TyperError:unsupported operand typ(s) for +:'int'
2.* 運(yùn)算
字符串*整數(shù):字符串重復(fù)多次
print ('abc'*2) abcabc
3.所有的比較運(yùn)算符
str1 = 'abc'
print ( 'abc' == str1)
print (str1 != 'ab')
- 比較大小
str1 > str2;str1 < str2
讓str1中的每一位的字符安拟,分別和str2中的每一位字符依次比較。直到不同為止挫剑,再看不同字符中誰(shuí)的編碼值大或者小
print ('abcd' > 'abcde')
print ('陳' > '虹')
print (ord('陳'),ord('虹'))
4.in 和 not in
str1 in str2:判斷str1是否在str2中(str2是否包含str1 / str1是否是str2的字串)
結(jié)果是 布爾值
print('abc' in 'abcdef')
print ('a' not in 'bcd')
5.獲取字符串的長(zhǎng)度
字符串的長(zhǎng)度:指的是字符串中字符的個(gè)數(shù)
- len()內(nèi)置函數(shù)
str3 = 'project'
print (len(str3),len('abc 123\n')) 7 8
- 補(bǔ)充:空串
str4 = ' '
str5 = " "
print (len(str4)) 0
print (str3[-1],str3[len(str3)-1]) t t
6.阻止轉(zhuǎn)義
在字符串的最前面添加r/R可以阻止轉(zhuǎn)義
print ('a\nb') a
b
print (r'a\nb') a\nb
print ('\\\n\\') \換行\(zhòng)
- 練習(xí)
str7 = r'\nabc123' 求 str7[3] b
str8 = 'abc123\\123' 求: str8[-5] 3
四去扣、字符串相關(guān)的方法
python中的字符串提供了很多的內(nèi)建函數(shù)
- 字符串.函數(shù)( )
- 注意:這些所有的函數(shù)的功能都不會(huì)影響原來(lái)字符串,而是產(chǎn)生一個(gè)新的字符串
str = 'hello python'
1.capitalize() 將字符串的第一個(gè)字符轉(zhuǎn)換為大寫
newstr = str.capitalize()
print (newstr) Hello python
2.center(width,fillchar)
讓字符串變成width對(duì)應(yīng)的長(zhǎng)度,原內(nèi)容居中愉棱,剩余的部分使用fillchar的值來(lái)填充
print ('abc'.center(8,'.')) ..abc...
3.rjust(width,fillchar)
讓字符串變成width對(duì)應(yīng)的長(zhǎng)度唆铐,原內(nèi)容靠右,剩余的部分使用fillchar的值來(lái)填充
num = '1'
new_num = num.rjust(3,'0')
print (new_num) 001
3.原字符串.count(str)
判斷str值在原字符串中出現(xiàn)的次數(shù)
str1 = '12121212'
print (str1.count('1')) 4
4.字符串1.join(字符串2)
在字符串2中的每個(gè)字符之間插入一個(gè)字符串1
print ('aa'.join('0000')) 0aa0aa0aa0
5.str1.replace(old,new)
將str1中old部分全部替換成new
new_str = 'abcdefsa'.replace('a','?')
print (new_str) ?bcdefs?
五奔滑、python的字符串內(nèi)建函數(shù)
1 .capitalize():將字符串的第一個(gè)字符轉(zhuǎn)換為大寫
str1 = 'teacher'
print (str1.capitalize()) Teacher
2 .center(width, fillchar):返回一個(gè)指定的寬度 width 居中的字符串艾岂,fillchar 為填充的字符,默認(rèn)為空格朋其。
num = '123'
print (num.center(8,'*')) **123***
3 .count(str, beg= 0,end=len(string)):返回 str 在 string 里面出現(xiàn)的次數(shù)王浴,如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)
print ('12332112'.count('1')) 3
10 .isalnum():如果字符串至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返 回 True,否則返回 False
print ('12335abcd'.isalnum()) True
print ('.........'.isalnum()) false
11 .isalpha():如果字符串至少有一個(gè)字符并且所有字符都是字母則返回 True, 否則返回 False
print ('abcde'.isalpha()) True
print ('zxc12..'.isalpha()) False
12 .isdigit():如果字符串只包含數(shù)字則返回 True 否則返回 False
print ('13450'.isdigit()) True
13 .islower():如果字符串中包含至少一個(gè)區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是小寫梅猿,則返回 True氓辣,否則返回 False
print ('Teacher'.islower()) False
14 .isnumeric():如果字符串中只包含數(shù)字字符,則返回 True袱蚓,否則返回 False
print ('132154a'.isnumeric()) False
15 .isspace():如果字符串中只包含空白钞啸,則返回 True,否則返回 False.
print (' 1 1 2 1'.isspace()) False
16 .istitle():如果字符串是標(biāo)題化的(見 title())則返回 True喇潘,否則返回 False
print ('Two'.istitle()) True
17 .isupper():如果字符串中包含至少一個(gè)區(qū)分大小寫的字符体斩,并且所有這些(區(qū)分大小寫的)字符都是大寫,則返回 True颖低,否則返回 False
print ('TWO'.isupper()) True
18 .join(seq):以指定字符串作為分隔符絮吵,將 seq 中所有的元素(的字符串表示)合并為一個(gè)新的字符串
print('00'.join('111')) 1001001
19 .len(string):返回字符串長(zhǎng)度
print (len('123321123456789')) 15
20 .ljust(width[, fillchar]):返回一個(gè)原字符串左對(duì)齊,并使用 fillchar 填充至長(zhǎng)度 width 的新字符串,fillchar 默認(rèn)為空格忱屑。
print ('123'.ljust(8,'*')) 123*****
21 .lower():轉(zhuǎn)換字符串中所有大寫字符為小寫.
print ('TEACHER'.lower()) teacher
22 .lstrip():截掉字符串左邊的空格或指定字符
print (' 123'.lstrip()) 123
print ('*****123'.lstrip('*')) 123
23 .maketrans():創(chuàng)建字符映射的轉(zhuǎn)換表蹬敲,對(duì)于接受兩個(gè)參數(shù)的最簡(jiǎn)單的調(diào)用方式,第一個(gè)參數(shù)是字符串想幻,表示需要轉(zhuǎn)換的字符粱栖,第二個(gè)參數(shù)也是字符串表示轉(zhuǎn)換的目標(biāo)。
print ('123'.maketrans('abc','789'))
29 .rjust(width,[, fillchar]):返回一個(gè)原字符串右對(duì)齊,并使用fillchar(默認(rèn)空格)填充至長(zhǎng)度 width 的新字符串
print ('123'.rjust(8,'*')) *****123
30 .rstrip():刪除字符串字符串末尾的空格.
print ('123******'.rstrip('*')) 123
34 .strip():在字符串上執(zhí)行 lstrip()和 rstrip()
print ('***123***'.strip())
35 .swapcase():將字符串中大寫轉(zhuǎn)換為小寫脏毯,小寫轉(zhuǎn)換為大寫 (和upper()作用一樣)
print ('ASD'.swapcase()) asd
print ('zxc'.swapcase()) ZXC
36 .title():返回"標(biāo)題化"的字符串,就是說所有單詞都是以大寫開始闹究,其余字母均為小寫(見 istitle())
print ('teacher is good'.title()) Teacher Is Good
38 .upper():轉(zhuǎn)換字符串中的小寫字母為大寫
print ('asd'.upper()) ASD
39 .zfill (width):返回長(zhǎng)度為 width 的字符串,原字符串右對(duì)齊食店,前面填充0
print ('123'.zfill(8)) 00000123
40 .isdecimal():檢查字符串是否只包含十進(jìn)制字符渣淤,如果是返回 true,否則返回 false
print ('1852asf'.isdecimal()) False
print ('124523'.isdecimal()) True