[8] Python轉義字元和切片
1. 概述
今天我們要補充一下字元串和列表的相關內容。加粗體代表我們已經介紹的內容,斜體代表新增內容。
- 計算機編程的原理簡要介紹
- 集成開發環境PyCharm
- 變數名、數字、字元串、列表
- 句式
- 輸入和輸出
- 條件判斷語句
- 循環語句
- 注釋
- 函數
- 模塊和引入
- 各類數據結構
2. 轉義字元
何為轉義字元?在我們打代碼時,有些格式的字元我們並不能打出來,比如另起一行、回車鍵,或者是單雙引號等等。我們來通過具體例子看一下為什麼我們需要轉義字元。
print(""Time is money." - Benjamin Franklin")n
在編譯器編譯這行代碼時,它會尋找兩個引號之間的內容。我們需要它最後顯示的文字是:
"Time is money."- Benjamin Franklin
很顯然文本里本來就要有的引號,和表示這段文字是字元串的引號交錯著排列,迷惑了編譯器。那麼如何告訴編譯器這個引號是屬於這個文本的一個字元呢?
":表示的是雙引號n:表示的是單引號nn:換行nt:橫向制符表,也就是tabn:表示的是後斜杠n
具體應用看這裡:
print(""Time is money." - Benjamin Franklin")nprint(Time is money. - Benjamin Franklin)nprint("This is the first line.nThis is another line.")nprint("tThis is after the tab.")nprint("Just to print out backslash ")n
運行結果:
"Time is money." - Benjamin FranklinnTime is money. - Benjamin FranklinnThis is the first line.nThis is another line.ntThis is after the tab.nJust to print out backslash n
其實在Python字元串中,如果你習慣使用雙引號,而雙引號里不會再出現其他雙引號,你可以直接使用單引號符號,沒有必要打後斜杠。反之亦然,如果你習慣用單引號括起字元串,而裡面沒有其他單引號,可以省去後斜杠直接用雙引號符號。
print(""Time is money." - Benjamin Franklin")nprint("Time is money." - Benjamin Franklin)n
但是我個人還是建議大家但凡碰到引號作為字元的,還是用轉義字元比較安全、保險,因為如果以後碰到需要添加文本內容或者修改代碼格式,事先用好轉義字元會避免不必要的麻煩。
3. 切片
首先何為切片,切片這名字聽著像是在切豆腐,但是其實我們已經接觸過切片了,也就是字元串、列表等一串東西的截取。
code = "ABCD-1234-WXYZ-9876"nprint(code[1:3]) #BCn
然而我們在這裡再補充一個,
var_name[from:to:step]n
我們添加了一個冒號,後面加上一個數字step,表示每隔幾個截取一下。這麼說有點玄乎,看一下例子:
code = "Aa-Bb-Cc-Dd-Ee-Ff-Gg"nprint(code[3:14:3]) #BCDEn
我們從下標為3(第四個)的字元上,也就是B開始,每3個字元截取一下,一直截到第十四個字元(下標為14-1=13),也就是小寫的e。輸出的字元串第一個是B,接下來,我們就直接+3,截取下標為6的字元,C,再+3截取D,再+3截取E,再+3時下標已經超過e所在的位置了,所以停止。最後輸出BCDE。
大家可以玩一玩,對於列表來說也是一樣的,下面給大家看幾個例子:
list_number = [0, 1, 2, 3, 4, 5, 6, 7]nlist_even = list_number[::2]nlist_odd = list_number[1::2]nprint(list_even) #[0, 2, 4, 6]nprint(list_odd) #[1, 3, 5, 7]n
我們也說過了,如果冒號上沒填數字,就是默認值,頭下標沒填就是從開頭截取,尾下標沒填就是截至最後,第三個數字(第二個冒號後的數字)空著,也就是默認間隔,為1,即在頭下標到尾下標之間每個字元都要。
list_number = [0, 1, 2, 3, 4, 5, 6, 7]n#接下來三個list都長得一樣nlist_a = list_number[1:6]nlist_b = list_number[1:6:]nlist_c = list_number[1:6:1]nprint(list_a, list_b, list_c)n#[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]n
那麼如果我們間隔是負數會是什麼樣呢?
list_number = [0, 1, 2, 3, 4, 5, 6, 7]nlist_partial_backward = list_number[6:1:-1]nprint(list_partial_backward) #[6, 5, 4, 3, 2]n
我們可以看到頭下標比尾下標靠後,即從下標為6的數,倒著截,間隔為1,截至下標為頭下標+1的數,也就是2這裡。
如果我們非要調皮,想要頭下標比尾下標靠前:
list_naughty = list_number[1:6:-1]n
這樣截取出來的是個空列表(但不報錯),我們先要從前往後截取,又要從後往前截取,指示本就不明確,結果肯定什麼也沒有。
當然這裡的頭尾下標我們都能用負數下標。
4. 列表的reverse函數
對於列表,我們有一個reverse,反轉函數。顧名思義,就是把這個列表倒過來排序,切片中也有類似運用,該切片也可以應用至字元串中:
list_number = [0, 1, 2, 3, 4, 5, 6, 7]nlist_backward = list_number[::-1]nprint(list_backward) #[7, 6, 5, 4, 3, 2, 1, 0]n
使用[::-1]就能實現把整個列表反著截取。這裡頭尾下標缺失,Python看到間隔是-1就默認是從最後倒著截到最前。
那麼我們還提及過reverse函數,它和這個切片之間有什麼區別呢?
首先,切片只是截取字元串或者列表,截取的目的是按照某個順序(正向、反向、間隔)複製下一個片段的數據,這個片段可以是整個。既然是複製下來的,那麼原本的列表或字元串就不會變。另外,改變原來列表的數據不會對切片數據產生影響(這個要到很後面才介紹,淺拷貝和深拷貝)。
但是在列表中,我們有個reverse函數,它是直接把原來的數據反了一下,具體看:
list_number = [0, 1, 2, 3, 4, 5, 6, 7]nlist_number.reverse()nprint(list_number) #[7, 6, 5, 4, 3, 2, 1, 0]n
reverse函數的作用是把原來的列表直接反著排序,原來的列表就被硬生生改掉了。因為reverse是個內部函數,我們並不能把list_number.reverse()這一行作為一個新列表賦值給其他變數。
今天的內容就當是對前面內容的小補充,會對以後的代碼有幫助。
推薦閱讀:
※深度學習:進化
※昂貴的至強E5比同代i7貴在哪裡?
※讓你用編程代碼表白,要怎麼寫呢?
※coursera的機器學習基石及技法停課後,還有什麼類似的網課?
※為什麼很多好的創意最初都出現在國外?