首頁 > 軟體

Python字串的字元轉換、字串劈分、字串合併問題分析

2023-03-21 06:00:55

1.字串的字元轉換

1.1.字元轉換的概念

在前面說的的字串替換,是將字串中的一個子串替換成了新的子串,如果我們想對字串中的某些字元進行轉換,也就是對字串中的單個字元進行替換,可以呼叫方法maketrans和translate來實現。

首先呼叫maketrans方法建立一個轉換表,在轉換表中宣告要將那些字元轉換成什麼字元,然後將建立的轉換表作為引數傳給translate方法,實現字元的轉換。

maketrans方法建立轉換表的語法:

str.maketrans('轉換的字元', '轉換後的字元','刪除的字元')

maketrans方法可以傳入三個引數:

  • 第一個引數用於指定被轉換的字元,如果指定了多個字元,那麼轉換後的字元也需要指定多個,且數量都要相同,被轉換的第一個字元會轉換成第二個引數中的第一個字元,案例中會說明。
  • 第二個引數用於指定轉換後的字元。
  • 第三個引數用於指定刪除那些字元。

定義好一個轉換表之後,使用print可以列印這個轉換表的內容,此時返回的是一個字典,字典中的每個key:value都是字元對應的ordinal value值。

translate方法將轉換表當做引數傳入,再被定義的字串呼叫,最終實現字元的轉換。

1.2.字元轉換的應用案例

1)轉換表的建立

定義轉換表時,如果指定了多個被轉換的字元,那麼轉換後的字元數量要與被轉換的字元數量相同,此時第一個引數和第二個引數會交叉轉換,程式碼如下。

contable = str.maketrans('agx', '789')
print(contable)

'''
程式碼解釋:
    str.maketrans('agx', '789')定義了一個轉換表,其中字元a轉換成字元7,字元g轉換成字元8,字元x轉換成字元9
    當使用print函數列印定義的轉換表時,返回的是一個字典,key是被轉換的字元,value是轉換後的字元,並且返回的是字元的ordinal value值
    返回結果:{97: 55, 103: 56, 120: 57}
        {97是字元a: 55是字元7, 103是字元g: 56是字元8, 120是字元x: 57是字元9}
'''

可以使用print函數列印轉換表,返回結果是一個字典,在字典中的值是對應字元的ordinal value值,在字典中可以明確的看到什麼字元會被轉換成什麼字元,如下圖,97是字元a,55是字元7,97對應的字元會轉換成55對應的字元。

除了直接以字串的形式宣告被轉換字元和轉換後字元的原始值外,還可以使用字典的方法宣告轉換與被轉換的字元,因為轉換表返回的結果就是一個字典,但是用的最普遍的方法還是直接在轉換表中宣告被轉換的字元。

#使用字典的形式,在字典中宣告轉換的字元、被轉換字元的原始值
contable = str.maketrans({'a': '7', 'g': '8', 'x': '9'})
print(contable)
'''
	此時使用print列印轉換表時,就會發現轉換後的字元會以原始值的形式記錄在字典中,被轉換的字元還是以ordinal value值表示
'''
#輸出結果:{97: '7', 103: '8', 120: '9'}

#還是使用字典的行駛,在字典中宣告被轉換字元、轉換字元的ordinal value值
contable = str.maketrans({97: 55, 103: 56, 120: 57})
print(contable)
'''
	這種方法需要實現使用ord函數獲取被轉換字元、轉換字元的ordinal value值,然後在字典中直接宣告字元的ordinal value值
'''
#輸出結果:{97: 55, 103: 56, 120: 57}

2)字元的轉換

#首先定義一個轉換表,這個轉換表可以被任意字串呼叫使用
contable = str.maketrans('agx', '789')

#定義一個字串
mystr = 'jiangxluplader'

#使用translate方法將轉換表以引數的形式傳入,然後由字串呼叫這個方法實現字元的轉換
print(mystr.translate(contable))

#輸出結果:ji7n89lupl7der

發現字串中所有的a字元都被轉換成了7,所有的g字元都被轉換成了8,所有的x字元都被轉換成了9。

3)maketrans方法定義轉換表時 還可以指定要刪除的字元,例如刪除字元u、p

contable = str.maketrans('agx', '789', 'up')
mystr = 'jiangxluplader'
print(mystr.translate(contable))

'''
	maketrans方法建立轉換表時,第三個引數是指定刪除的字元
'''

#輸出結果:ji7n89ll7der

4)maketrans方法定義轉換表中,還可以不對字元進行轉換,只對某些字元進行刪除,例如只刪除字元u、p

contable = str.maketrans('', '', 'up')
mystr = 'jiangxluplader'
print(mystr.translate(contable))

#輸出結果:jiangxllader

當指定第三個引數時,會將指定的字元刪除,其實就是將指定的字元設定成了None物件。

2.字串的劈分

2.1.字串劈分的概念

所謂的字串劈分指的是,根據指定的分隔符,將字串一分為N個,例如字串“aaa bbb”,預設的分隔符是空格,根據分隔符可以將這個字串分為“aaa”,“bbb”,這就是字串的劈分。字串的劈分共有兩種方法:

1)呼叫方法split或者rsplit劈分字串

  • split方法是從字串的左側開始劈分字串,從前往後開始劈分。
  • rsplit方法是從字串的右側開始劈分字串,從後往前開始劈分。

split和rsplit方法會根據分隔符對字串中所有出現分隔符的地方進行劈分。

預設的分隔符是空格字串,這兩個方法如果不指定最大的劈分次數,輸出的內容沒有任何區別,並且這兩個方法的返回值都是一個列表。

當字串中沒有指定的分隔符時,這兩個方法都會返回字串本身,但是也會將字串本身放在列表中。

2)呼叫方法partition或者rpartition劈分字串

partition和rpartition這兩個方法在呼叫的時候必須指定分隔符,然後對字串進行劈分,這兩個方法對字串劈分後會返回一個元組。

  • partition方法是左劈分,從左往右找到分隔符第一次出現的位置,然後開始劈分字串,始終劈分成三個元素,第一個元素是分隔符左側的部分,第二個元素是分隔符,第三個元素是分隔符後面的部分。
  • rpartition方法是右劈分,從右往左找到分隔符第一次出現的位置,或者從左往右找到分隔符最後一次出現的位置,然後開始劈分字串,始終劈分成三個元素,第一個元素是分隔符左側的部分,第二個元素是分隔符,第三個元素是分隔符後面的部分。

partition方法和rpartition只會將字串中第一次出現分隔符的位置,進行劈分,一分為三,這就是與split方法的最大區別

partition方法和rpartition兩個方法只是開始劈分的位置處不同,然後將字串劈分為三個元素:

  • 分隔符前面的部分
  • 分隔符
  • 分隔符後面的部分

如果字串中不存在指定的分隔符,兩個方法都會返回字串本身,partition方法劈分的三個元素順序依次為:字串本身、空字串、空字串,rpartition方法劈分的三個元素依次為:空字串、空字串、字串本身。

2.2.呼叫方法split或者rsplit劈分字串

1)基本的劈分案例

#原始字串
mystr = "DevOps Jenkins Kubernetes"

#左劈分
print(mystr.split())

#右劈分
print(mystr.rsplit())

'''
	左劈分是從DevOps第一個空格字串處開始劈分,右劈分是從Kubernetes最後一個空格字串處開始劈分
	預設的劈分字串是空格字串,只要遇到空格字串,就將空格字串左側的字串劈分出來。
'''

可以看到split和rsplit兩個方法對字串劈分後,並沒有明顯的區別。

2)通過引數sep指定分隔符劈分字串

在split和rsplit方法中都可以使用sep引數指定分隔符,從而根據指定的分隔符去劈分字串。

mystr = "DevOps|Jenkins|Kubernetes"
print(mystr.split(sep='|'))
print(mystr.rsplit(sep='|'))

'''
	split(sep='|')、rsplit(sep='|')指定分隔符為「|」
'''

可以看到split和rsplit兩個方法對字串劈分後,並沒有明顯的區別。

當指定的分隔符字串不存在時,則會返回字串本身,但是也會將字串本身放在列表中。

mystr = "DevOps Jenkins Kubernetes"
print(mystr.split(sep='|'))
print(mystr.rsplit(sep='|'))

3)通過引數maxsplit指定劈分字串的最大劈分次數

在split和rsplit方法中都可以使用maxsplit引數指定劈分字串的最大劈分次數,什麼意思呢?原本一個字串可以被劈分6次,但是我們只需要劈分2次就行,就可以使用maxsplit引數指定指定劈分字串的最大劈分次數。

當指定了最大的劈分次數時,當超過最大的劈分次數後,剩餘的子串會單獨作為一部分輸出,此時split和rsplit兩個劈分方法就會有明顯的區別。

#定義原始字串
mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab"

'''
	使用split方法是從左往右開始劈分,從第一個子串位置處開始劈分,分隔符為"|",劈分次數為2,本身這個字串可以被劈分5次,我們只劈分2次,那麼DevOps、Jenkins會被劈分出來作為列表的單獨元素,而剩餘的子串Kubernetes|Python|Gitlab會被作為一部分放在列表的一個元素內
'''
print(mystr.split(sep='|', maxsplit=2))
#輸出結果:['DevOps', 'Jenkins', 'Kubernetes|Python|Gitlab']

'''
	使用rsplit方法是從右往左開始劈分,從最後一個子串處開始劈分,分隔符為"|",劈分次數為2,本身這個字串可以被劈分5次,我們只劈分2次,那麼Gitlab、Python這兩個字串會被劈分出來作為列表的單獨元素,而剩餘的字元DevOps|Jenkins|Kubernetes會被作為一部分,放在列表的一個元素內
'''
print(mystr.rsplit(sep='|', maxsplit=2))
#輸出結果:['DevOps|Jenkins|Kubernetes', 'Python', 'Gitlab']

當在劈分方法內指定了最大的劈分次數的引數時,split左劈分和rsplit右劈分就會有明顯的區別,split方法是從前往後根據分隔符進行劈分,rsplit方法是從後往前根據分隔符進行劈分。

2.3.呼叫方法partition或者rpartition劈分字串

partition方法是左劈分,從左往右找到分隔符第一次出現的位置,然後開始劈分字串,始終劈分成三個元素,第一個元素是分隔符左側的部分,第二個元素是分隔符,第三個元素是分隔符後面的部分。

rpartition方法是右劈分,從右往左找到分隔符第一次出現的位置,或者從左往右找到分隔符最後一次出現的位置,然後開始劈分字串,始終劈分成三個元素,第一個元素是分隔符左側的部分,第二個元素是分隔符,第三個元素是分隔符後面的部分。

這兩個方法,只會根據一個分隔符進行劈分字串,且始終劈分成三個元素,partition方法的分隔符取決於在字串中第一次出現的分隔符,rpartition方法的分隔符取決於字串中最後一次出現的分隔符。

1)呼叫方法partition劈分字串

mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab"
print(mystr.partition('|'))

'''
	partition從左往右找到第一次出現分隔字串的位置,從這裡開始劈分字串,分隔符左側的部分(DevOps)為第一個元素,分隔符(|)為第二個元素,分隔符右側的部分(Jenkins|Kubernetes|Python|Gitlab)為第三個元素。
'''

#輸出結果:('DevOps', '|', 'Jenkins|Kubernetes|Python|Gitlab')

2)呼叫方法rpartition劈分字串

mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab"
print(mystr.rpartition('|'))

'''
	rpartition從左往右找到最後一次出現分隔字串的位置,分隔符左側的部分(DevOps)為第一個元素,分隔符(|)為第二個元素,分隔符右側的部分(Jenkins|Kubernetes|Python|Gitlab)為第三個元素。
'''

#輸出結果:('DevOps|Jenkins|Kubernetes|Python', '|', 'Gitlab')

確實和理論說明的一樣,從左往右找到最後一次分隔符出現的位置,分隔符左側的部分為元組中的第一個元素,分隔符為第二個元素,分隔符右側的部分為元組中的第三個元素。

3)當字串中只有一個分隔符字串且分隔符後沒有任何字元時

當字串中只有一個分隔符字串時,且分隔符後面沒有任何字串,此時無論是partition方法還是rpartition方法,劈分的字串第三個元素一定為空。

mystr = "DevOps|"
print(mystr.partition('|'))
print(mystr.rpartition('|'))

第三個元素取的都是分隔符後面的部分,分隔符後面的部分什麼也沒有,因此就會輸出空字串。

4)當字串中不存在指定的分隔符字串(partition方法)

如果字串中不存在指定的分隔符,partition方法劈分的三個元素順序依次為:字串本身、空字串、空字串。

mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab"
print(mystr.partition('*'))

#輸出結果:('DevOps|Jenkins|Kubernetes|Python|Gitlab', '', '')

第一個元素是字串的本身,第二個元素是空字串,第三個元素也是空字串。

4)當字串中不存在指定的分隔符字串(rpartition方法)

如果字串中不存在指定的分隔符,rpartition方法劈分的三個元素順序依次為:空字串、空字串、字串本身。

mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab"
print(mystr.rpartition('*'))

第一個元素是空字串,第二個元素是空字串,第三個元素是字串的本身。

3.字串的合併

可以呼叫方法join將多個字串合併成一個字串。語法格式如下:

'字串的間隔符'.join(列表|陣列)

字串的間隔符可以指定,也可以不指定,指定後,每個元素字串在合併時都會在後面新增一個分隔符。

1)使用join方法將列表中多個字串進行合併

使用join方法可以將列表中的多個元素,元素也都是字串,將這些字串進行合併。

print(''.join(["Python", "Go", "K8S"]))

#輸出結果:PythonGoK8S

使用join方法將列表中的每個元素合併時新增一個分隔符“|”

print('|'.join(["Python", "Go", "K8S"]))

#輸出結果:Python|Go|K8S

2)使用join方法將元組中的多個字串進行合併

join方法也可以將元組中的元素合併。

print('|'.join(("Python", "Go", "K8S")))

#輸出結果:Python|Go|K8S

3)可以把字串看成是字元的列表,然後使用join方法將這些字元合併成字串

可以把字串看成是字元的列表,然後使用join將這些字元加上分隔符合併成新的字串。

print('|'.join("Python"))

#輸出結果:P|y|t|h|o|n

到此這篇關於Python字串的字元轉換、字串劈分、字串合併的文章就介紹到這了,更多相關Python字串合併內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com