初識字串
維基百科對於字串的定義式:字串是由零個或者多個字元組成的有限序列。你之前學會敲的第一行 print 程式碼裡的 “Hello World”,就是一個字串。字串的本質就是一串字元,不管是中文還是英文抑或是空格等特殊字元都可以作為字串來看待。
在 Python 裡,字串和上一篇文章( 零基礎學習 Python 之數字與運算 )裡講到的數字一樣,都是一種物件型別,字串型別用 str 表示,用英文的單引號或雙引號括起來。
>>> 'good good study'
'good good study'
>>> "day day up"
'day day up'
複製程式碼
字串與變數
上面我說到字串和數字都是一種物件型別,那麼在上篇文章中我們說數字可以有變數指向它,那麼字串當然也可以。
>>> string = 'Hello World'
>>> string
'Hello World'
>>> print(string)
Hello World
複製程式碼
字串連線
如果我有兩個字串,分別是 'Hello' 和 'World',那麼我想得到 'Hello World' 那可咋整?別怕,Python 裡提供了特別簡單的辦法,那就是相加,就是你們知道的那個加減乘除的那個加。
>>> a = 'Hello'
>>> b = 'World'
>>> a + b
'HelloWorld'
>>> a + ' ' + b
'Hello World'
複製程式碼
但是相加只是限同種型別的,比如字串和字串相加,數字和數字相加,字串和數字不可以,會報錯。
這裡再多說一點,字串其實還可以乘,看下面的例子就知道怎麼用了:
>>> string = 'Python'
>>> string * 3
'PythonPythonPython'
複製程式碼
就至此為止了,減和除你們就不用想了。
Python 轉義字元
什麼時候能用到轉義字元呢?下面我們看一個例子:
>>> 'what's your name'
File "<stdin>", line 1
'what's your name'
^
SyntaxError: invalid syntax
複製程式碼
為什麼會報錯呢?眼尖的朋友們可能已經看出來了,字串裡有三個單引號,這樣直譯器就尷尬了,不知道單引號包裹的到底是誰,所以只好報錯了。那麼有什麼解決辦法呢?一種是用 雙引號包裹整個字串,另一個就是要用到我們接下來要說的轉義字元了。
>>> "what's your name"
"what's your name"
>>> 'what\'s your name'
"what's your name"
複製程式碼
下面給大家放一張常用轉義字元的圖片,感興趣的朋友們可以去試試,在互動環境中都是可操作的。
原始字串
原始字串就是字串裡的每個字母都是自己原汁原味的,我們 \n 就是 \n ,不是換行符。一種方法就是用上述的轉譯字元,此外在這還有一種方法,就是在字串前面加個 r:
>>> string = "c:\now"
>>> print(string)
c:
ow
>>> print(r'c:\now')
c:\now
複製程式碼
索引 & 切片
我們在本篇文章剛開始的時候字串由多個字元構成,那麼在 Python 中如何操作每個字元,這裡就用到索引和切片。
索引的話其實是起的一個比較高階的名字,其實就是編號,就像考完試的名次一樣,這個不是 Python 所特有的,其他的程式語言也是這麼叫。
>>> string = 'I love Python'
>>> string[0]
'I'
>>> string[5]
'e'
複製程式碼
要想得到第一個字元,就用 string[0],以後依次類推,它和我們現實中的排名不同的是,它是從 0 開始的,你還記得麼?空格等特殊的也是字元,所以它們也是有編號的,這是正向的表示,在 Python 中,字串的索引還可以倒著表示,從最後一個開始 分別是 -1,-2,-3.....
然後人總是不滿足的,我可以通過索引一個一個的找出字元來,那我想找其中的一個子串怎麼辦?這時候我們的切片就閃亮登場了。如果我想得到 love 這個子串怎麼辦?具體的操作請見下面的例子:
>>> string = 'I love Python'
>>> string[2:6]
'love'
複製程式碼
因為 l 的索引是 2,e 的索引是5,所以我們可以看出來切片的作用區間是左閉右開的,即[2, 6)。這裡還有一點要說的是,字串的切片對原字串沒有影響,不會改變它。
切片還有很多有意思的操作,可以切的多姿多彩:
>>> string = 'I love Python'
>>> a = string[3:] #得到從3號到最後的字串
>>> a
'ove Python'
>>> b = string[:8] #得到從第1個字元到第7個字元
>>> b
'I love P'
>>> c = string[:] #得到所有的字元
>>> c
'I love Python'
複製程式碼
是不是覺得很有意思呢?切片的寫法還有很多,比如如果是倒序的話我該怎麼在切片裡表示?有興趣的可以自己去嘗試。
字串格式化輸出
Python 中的格式化和我們所熟知的對磁碟中的分割槽進行初始化是不一樣的概念,我們這裡說的是對字串的格式化,所謂字串的格式化就是我們先定義一個模板,然後在這個模板的一處或者幾處地方留出空位來,然後在那些空位上填上符合設定條件的字串,並顯示結果,這些留出來的空位我們稱為佔位符。下面我用具體的例子來說明。
>>> 'I love %s' #這裡的 %s 就是一個佔位符
'I love %s'
>>> 'I love %s' %'Python'
'I love Python'
複製程式碼
這種方法是原先很常用的一種方法,現在用的更多的是 format() 方法,下面我來展示具體的用法:
>>> 'I love {0} and {1}'.format('C++','Python')
'I love C++ and Python'
複製程式碼
在 format 裡面 {0},{1} 就成了佔位符,然後不要忘了字串和 format 中間那個很重要的英文句號。
常用的字串方法
字串裡的方法有很多,可以通過 dir(str)檢視,這麼多的方法我不會在這一一介紹,如果想使用的話,可以使用 help() 檢視,這裡僅僅列舉幾個常用的。
- find():檢測字串是否包含特定字元,如果包含,則返回開始的索引;否則,返回-1。
- index():檢測字串是否包含指定字元,如果包含,則返回開始的索引值,否則,提示錯誤.
- count(str1,start,end):返回str1在string中指定索引範圍內[start, end)出現的次數。
- replace(str1,count):將str1中的str1替換成str2,如果指定count,則不超過count次。
- replace(str1,count):將str1中的str1替換成str2,如果指定count,則不超過count次。
- split(‘分界符’,maxsplit):maxSplit預設值為-1,表示根據定界符分割所有能分割的,返回值為列表,如果 maxsplit有指定值,則僅分割 maxsplit 個子字串。
- strip():去掉字串左右兩邊的空白字元。
>>> string = 'i love python'
>>> string.find('ov') #檢查 str 是否在 string 裡面
3
>>> string.index('l')
2
>>> string.count('i',0,5)
1
複製程式碼
我這裡就隨便演示了前三個,當然字串的方法不只這些,這些函式在互動模式裡很好實現,如果沒事的話可以隨時看幾個,在互動模式裡按照我上面的樣子自己動手試試,這樣在用到某個方法的時候才能想起來有,否則的話再自己去寫很多程式碼去實現本身就存在的方法,很是浪費時間。
寫在最後
更多內容,歡迎關注公眾號「Python空間」,期待和你的交流。