本章知識(shí)點(diǎn) :> 字符串
- 復(fù)習(xí)一下
p0總結(jié)在線看
p1總結(jié)在線看
p4總結(jié)在線看
p5總結(jié)在線看
p6總結(jié)在線看

字符串
我們已經(jīng)使用過(guò)字符串 變量類型,你可能不知道,字符串 類型是實(shí)際開(kāi)發(fā)中最常用的類型。
互聯(lián)網(wǎng)上傳輸?shù)拇蟛糠謹(jǐn)?shù)據(jù)都是 字符串 (網(wǎng)頁(yè),爬蟲(chóng),文件等)
- 現(xiàn)在我們看看字符串的更多特性
- 本章相對(duì)來(lái)說(shuō)說(shuō)非常簡(jiǎn)單(只是一些知識(shí)的匯總)
-
123和”123“是兩種類型的變量 - 在python里,有一個(gè)函數(shù)是可以查看變量類型的,叫
type(變量)
t1 = type(123)
t2 = type("123")
print(t1)
print(t2)
試一下 在線Python
- 因?yàn)镻ython里的運(yùn)算對(duì)變量類型要求是嚴(yán)格的,所以有時(shí)候會(huì)因?yàn)轭愋筒粚?duì)報(bào)錯(cuò)
- 你可以用type函數(shù)看一下具體的類型是不是你預(yù)期的
轉(zhuǎn)義字符
- 我們看一個(gè)特殊的字符串
'That is Alice's cat.' - 它特殊在哪呢,我們注意到字符串里有一個(gè)
'單引號(hào) - 如果直接把
'單引號(hào) 寫(xiě)在字符串里,python會(huì)報(bào)錯(cuò)
s = 'That is Alice's cat.'
試一下 在線Python
- 為什么會(huì)這樣呢?
- 我們要把它拆開(kāi)來(lái)看
'That is Alice'????s cat.' - 我故意把字符串拆開(kāi)了
- 你會(huì)發(fā)現(xiàn)python很難識(shí)別到底你要寫(xiě)幾個(gè)字符串,它只要按你要寫(xiě)2個(gè)來(lái)對(duì)待了,但是兩個(gè)也不對(duì)啊
- 第二個(gè)字符串缺少 引號(hào)啊,于是報(bào)錯(cuò)了
- 怎么解決這個(gè)問(wèn)題?
- 我們可以用
\'轉(zhuǎn)義 表示字符串里的'
s = That is Alice\'s cat.'
試一下 在線Python
-
需要轉(zhuǎn)義表示的還有多個(gè)符號(hào)
image.png
字符串與列表
- 現(xiàn)實(shí)中有一個(gè)問(wèn)題是很常見(jiàn)的,字符串存儲(chǔ)了一篇文章,而文章很長(zhǎng)(有多行)
- 這個(gè)時(shí)候
字符串的多行表示方法可以方便的定義一個(gè)多行字符串
''' #3引號(hào)開(kāi)頭
Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary,
and extortion.
Sincerely,
Bob
''' #3引號(hào)結(jié)尾
你猜的沒(méi)錯(cuò),這個(gè)方法就叫
'''3引號(hào)法
試一下 在線Python還記得之前我們用for循環(huán)遍歷字符串嗎?
s = '我是中國(guó)人'
for w in s:
???? print(w)
list = ['我', '是', '中', '國(guó)', '人']
for w in list:
???? print(w)
試一下 在線Python
-
s和list都可以這樣遍歷,其實(shí)字符串的內(nèi)部結(jié)構(gòu)就是這樣的 - 換句話說(shuō),你把字符串看做單字符組成的列表是沒(méi)有問(wèn)題的
- 因此,你可以猜猜下面的操作會(huì)是什么結(jié)果?
w = s[0] #還記得列表的操作嗎
print(w)
試一下 在線Python
- len函數(shù)
l = len(s)
print(l)
試一下 在線Python
- 取中間的一段 (列表也有這樣的操作,雖然沒(méi)有講)
s1 = s[0:2]
print(s1)
試一下 在線Python
格式化
什么是格式化?
在字符串使用中經(jīng)常有這樣的場(chǎng)景,
'我今年' + str(20)歲或者
'我的名字叫' + name簡(jiǎn)單的理解為,一個(gè)字符串它不是靜態(tài)的,而是隨時(shí)會(huì)變的
或者說(shuō):這個(gè)字符串是一個(gè)模板(類似excel模板)
具體數(shù)據(jù)在模板上填寫(xiě)
這樣的情況可以用格式化的方法來(lái)簡(jiǎn)化。
具體語(yǔ)法
age = 20
name = '金哥'
s = '我今年 %d, 我的名字叫 %s' % (age, name)
print(s)
s = '我今年 %d, 我的名字叫 %s' % (age+1, name)
print(s)
*中間的%表示要做格式化'我今年 %d, 我的名字叫 %s' 就是我們說(shuō)的模板
第一個(gè)
%d和 第二個(gè)%s是占位符,%d表示將來(lái)這里要填整數(shù)%s將來(lái)要填字符串
試一下 在線Python
字符串函數(shù)
find 字符串查找
s = ’abcefg‘
i = s.find(b)
print(i)s.find(b)表示從s里查找b的位置。join() 和 split()
# 如果有幾個(gè)字符串'aa', 'bb', 'cc'
# 可以用用join函數(shù)把他們連到一起
s = ' '.join(['aa' , 'bb', 'cc'])
print(s)
#s的結(jié)果 "aa bb cc" #注意,中間的空格就是join前面的空格
s = 'x'.join('aa' , 'bb', 'cc'])
print(s)
#s結(jié)果是axxbbxcc #即:用x來(lái)連接他們
試一下 在線Pythonsplit()非常好懂,就是join()的反過(guò)程
s = 'aa bb cc'
l = s.split(' ')
print(l)
s = 'axxbbxcc'
l = s.split('x')
print(l)
試一下 在線Python
綜合運(yùn)用

- 我們看一下之前定義的地鐵結(jié)構(gòu)
d1 = {'四惠東':'四惠','四惠':'大望路','大望路':'國(guó)貿(mào)','國(guó)貿(mào)':'永安里','永安里':'建國(guó)門(mén)', '建國(guó)門(mén)':'東單','東單':'王府井','王府井':'天安門(mén)東','天安門(mén)東':'天安門(mén)西','天安門(mén)西':'西單','西單':'復(fù)興路', '復(fù)興路':'南禮士路','南禮士路':'木樨地'} - 再看另一個(gè)結(jié)構(gòu)
d1 = '四惠東,四惠,大望路,國(guó)貿(mào),永安里,建國(guó)門(mén),東單,王府井,天安門(mén)東,天安門(mén)西,西單,復(fù)興路,南禮士路,木樨地'
- 有沒(méi)有發(fā)現(xiàn),第二種結(jié)構(gòu)顯然跟接近我們描述一條線路,一個(gè)用逗號(hào)分隔開(kāi)的字符串。
- 但是第二個(gè)雖然適合人類理解,但不適合我們的算法,怎么辦?
- 問(wèn)題:如果把第二種結(jié)構(gòu)(字符串)轉(zhuǎn)化為第一種結(jié)構(gòu)(字典)
- 命名:
地鐵線路轉(zhuǎn)化器 - 思路:字符串可以用 split方法先轉(zhuǎn)成 列表
- 循環(huán)這個(gè)列表,把當(dāng)前站和下一站作為 鍵值對(duì)
d1 = '四惠東,四惠,大望路,國(guó)貿(mào),永安里,建國(guó)門(mén),東單,王府井,天安門(mén)東,天安門(mén)西,西單,復(fù)興路,南禮士路,木樨地'
def s2d(d1):
????l = []
????d = {}
????l = d1.split(",")
????n = 0 #這個(gè)表示位置
????total = len(l)
????while n < total-1:#為什么要total-1,因?yàn)樽詈笠徽緵](méi)有下一站
???? ????s = l[n]
???? ????next = l[n+1]
???? ????d[s] = next
???? ????n = n + 1
????return d
試一下 在線Python
目錄
0基礎(chǔ)教程金哥Python自學(xué)筆記P0~變量與運(yùn)算
0基礎(chǔ)教程金哥Python自學(xué)筆記P1~循環(huán)與控制
