Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

Python學習者發表於2018-11-06

生活中總有幾樣註定的事:死亡、稅單以及需要處理字串的程式設計師。 字串可以有多種形式。 它們可以是非結構化的文字,使用者名稱,產品描述,資料庫列表名,或者其它任何我們使用語言描述的內容。

既然字串資料幾乎無處不在,那麼掌握所使用的工具如何進行字串處理是非常重要的。 幸運的是,與其它語言甚至舊版本的Python語言相比,Python語言對字串的操作非常簡單。

您將從本文中學習一些最基本的字串操作:拆分,連線和拼接。 您不僅將學習如何使用這些工具,而且還將深入瞭解它們是如何工作。


字串拆分

Python語言中,字串是以str物件的形式表示的,是不可變的:這意味著不能直接更改記憶體中的物件。 記住這兩個特點將會幫助您學習(並且記住)如何使用.split( )。

您猜到字串的這兩個特徵是如何與Python語言中的拆分功能相關的嗎?如果您猜的到 因為字串是一種特殊型別,所以.split( )是一個例項方法,那麼您就是正確的!在其它一些語言(如Perl)中,是將原始字串用作獨立的.split( )函式的輸入,而不是使用方法呼叫字串本身。

注意:如何呼叫字串方法

這裡顯示的 .split()這種寫法就是對字串例項進行呼叫的方法。 可稱之為為靜態方法,但這並不理想的形式,因為它比較“冗長”。為了完整起見,舉個例子:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

與下面首選的方法一比較,就會覺得上面的寫法顯得有些笨拙了:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

有關Python語言中的例項、類和靜態方法的更多內容,請檢視我們的

Python深入教程

字串不可變會怎樣? 這其實是提醒您字串方法不支援就地操作,但它們會在記憶體中返回一個新物件。

注意:就地操作

就地操作是直接更改被呼叫的物件的操作。 常見的例子是對列表使用的.append( )方法:當您對列表使用.append( )函式時,原列表會被更改,原列表中填加了.append( )的輸入。

無引數字串拆分

在深入學習字串拆分之前,先看一個簡單的例子:

Python 程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

輸出結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

這實際上是.split( )呼叫的一個特例,就是因為簡單,所以我選了它做例子。如果不指定任何分隔符,.split( )會使用空格做為分隔符。

這種不帶引數直接呼叫.split( )的另一個特性是它會自動刪除字串前導、尾隨以及連續的空格。 比較一下對下面的字串呼叫split( )時,不使用分割符和使用" "(空格)作為分割符時的結果:

Python 程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

Python 程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

首先要注意的是,這個例子反映了Python語言中字串的不可改變性:後面呼叫.split( )時是對原始字串進行操作,而不是對第一次呼叫.split( )後生成的列表進行操作。

第二個你應該注意到的是,無引數呼叫.split( )會提取句子中的單詞並丟棄任何空格。

指定分隔符

.split(" ")的結果很直觀。 當有前導或尾隨分隔符時,您將得到一個空字串,這可以在結果列表的第一個和最後一個元素中看到。

當有多個連續的分隔符(例如“this”和“is”之間以及“is”和“my”之間的多個空格),第一個將用作分隔符,後續的分隔符將進入結果列表 作為空字串。

注意:呼叫.split()時的分隔符

雖然上面的示例使用單個空格字元作為.split( )的分隔符,但並沒有限制您使用的分隔符的型別或字串長度。 唯一的要求是您的分隔符是一個字串。 你可以使用從“...”到“separator”等任何東西。

使用Maxsplit對拆分進行限定

.split( )有一個名為maxsplit的可選引數。 預設情況下,.split( )將在呼叫時進行所有可能的拆分。 但是,如果對maxsplit賦值後,只會生成指定數量的拆分。 用我們之前的示例字串,可以看到maxsplit的執行情況:

Python 程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

執行結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

如上所示,如果將maxsplit設定為1,則第一個空白區域將作為分隔符,其餘的部分將被忽略。 讓我們做一些練習來測試一下到目前為止所學的一切。

練習: “ 自己試試看: Maxsplit”

如果對maxsplit賦一個負數,結果會是怎樣?

答案: “ 自己試試看: Maxsplit”

.split( ) 將對所有的分隔符上進行字串拆分,這和不設定Maxsplit引數時的預設設定是一樣的。

練習: “章節理解檢查”

您最近拿到了一個逗號分隔(CSV)的檔案,但是其格式編排的大有問題。 您的任務是將每行提取到一個列表中,該列表的每個元素代表該檔案的列。 這個檔案的格式有什麼問題呢? 其中的“Address”欄位中包含了多個逗號,但實際上需要在列表中表示為單個元素!

假定讀入到記憶體中的檔案是下面這樣的多段字串:

CSV檔案:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

希望的輸出結果應該是這樣的由列表組成的列表

Python輸出:


學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

內層的列表是我們關心的CSV檔案的列元素,每一個內層的列表是CSV檔案的一行,外層的列表把所有的行組合起來。

答案: “章節理解檢查”

這裡給出我的答案。可以由幾種方法得到結果。重要的是如何使用.split(),以及使用附加引數得到希望的結果:

Python程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

我們呼叫了兩次.split( )。第一個呼叫可能理解起來有點難,但不要擔心!我們一步一步看進去,您就會對這些表示式熟悉了。來看看第一個.split( )呼叫吧:unsplit.split(" n")[1:]。

第一個元素是unsplit,是指向輸入字串的變數。之後就是.split( )呼叫:. split(" n")。這裡,我們使用了一個特殊字元 - 換行符 做為分隔符。

是做什麼的呢?顧名思義,它指明在讀取字串的內容時,它之後的每個字元都應顯示在下一行。像我們使用的input_string這樣的多行字串中,每行的末尾都有一個隱藏的 n。

這一行最後的部分用法可能有點新:[1:]。這條語句執行到這個部分之前會輸出一個新的列表, [1:]看起來像列表索引表示,其實它就是一種列表索引的表示方法!這一行最後額外的索引表示法會為我們輸出一個列表切片。在本例中,我們取出索引1以及其後面的所有內容,丟棄索引0處的元素。

總之,我們遍歷一個字串列表,其中每個元素代表多行輸入字串中除了第一行之外的每一行。

對每一行字串,我們再次使用.split( )進行字元拆分,但這次我們使用maxsplit僅拆分前兩個逗號,保留地址部分的內容原封不動。 之後,我們把結果新增到已定義的列表陣列中,並返回給呼叫者。

字串的連線及拼接

另一個字串的基本操作是與拆分字串相反的操作:字串連線。 如果您還沒有關注到這個功能,請不要擔心。 這只是把字串“粘在一起”的一種奇特方式。

使用 + 操作符進行連線

有幾種方法可以做到這一點,具體取決於您要實現的目標。 最簡單和最常用的方法是使用加號(+)將多個字串新增到一起。 只需在您想要連線的字串之間放置一個+:

Pyton程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

和數學運算一樣,您還可以將字串相乘來進行字串重複:

Pyton程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

請記住,字串本身是不可改變的! 如果想把字串連線或重複的結果存在變數中,則必須將結果賦給新的字串變數進行儲存。

Pyton程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

Pyton程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

Pyton程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

如果不是不可改變的字串,則full_sentence會輸出"Hello,world,world"。

另一個需要注意的是Python語言不會進行隱式字串轉換。 如果您嘗試將字串與非字串型別連線,Python將引發TypeError:

Pyton程式碼:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

結果:

學習Python核心知識點:深入瞭解字串的拆分,連線及拼接教程

出錯的原因是在Python語言中,您只能將字串與其他字串連線起來,這是中您需要注意到的Python語言的特點。如果您使用過諸如JavaScript之類的語言就會知道,這些語言中會嘗試進行隱式型別轉換。


相關文章