《金哥百變Python零基礎(chǔ)教程8》~字符串

本章知識(shí)點(diǎn) :> 字符串

北京地鐵

字符串

我們已經(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

  • slist 都可以這樣遍歷,其實(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)連接他們
    試一下 在線Python

  • split()非常好懂,就是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)與控制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容