[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的機器學習基石及技法停課後,還有什麼類似的網課?
為什麼很多好的創意最初都出現在國外?

TAG:Python | 计算机科学 | 编程 |