『無為則無心』Python序列 — 17、Python字串操作的常用API

繁華似錦Fighting發表於2021-07-02

上一篇文章說了Python字串下標和切片的概念,這篇文章來說說Python中對字串的常用操作。

對字串的操作主要分為三大類:查詢、修改和判斷

1、字串的查詢

所謂字串查詢方法,即是查詢一個子串在字串中的位置或出現的次數。

@1、find()方法

find()方法是,檢測某個子串是否包含在這個字串中,如果存在返回這個子串開始位置的下標,否則則返回-1

1)語法

字串序列.find(子串, 開始查詢的位置下標, 結束查詢的位置下標)

注意:開始和結束位置下標可以省略,表示在整個字串序列中查詢。

2)快速體驗

mystr = "Life is short,you need Python。"

print(mystr.find('short'))  # 8

# 在字串標記的範圍內查詢
print(mystr.find('o', 13, 25))  # 15

print(mystr.find('hello'))  # -1

@2、index()方法

index()方法檢測某個子串是否包含在這個字串中,如果存在返回這個子串開始的位置下標,否則則報異常。

index()方法獲取指定元素在列表中的第一次出現時索引,如果一個字串內出現多處子串存在,返回第一個子串開始的位置下標。

1)語法

字串序列.index(子串, 開始查詢的位置下標, 結束查詢的位置下標)

注意:開始和結束位置下標可以省略,表示在整個字串序列中查詢。

2)快速體驗

mystr = "Life is short,you need Python。"

print(mystr.find('short'))  # 8

# 在字串標記的範圍內查詢
# 可以只寫開始位置
print(mystr.find('o', 13, 25))  # 15

# 報錯ValueError: substring not found
print(mystr.find('hello'))

@3、rfind()rindex()方法

  • rfind()方法: 和find()方法功能相同,但查詢方向為右側開始。
  • rindex()方法:和index()方法功能相同,但查詢方向為右側開始。

注意:但是下標還是從左到右,從0開始算起,只是查詢開始的方向不同。

@4、count()方法

count()方法:返回某個子串在字串中出現的次數。

1)語法

字串序列.count(子串, 開始位置下標, 結束位置下標)

注意:開始和結束位置下標可以省略,表示在整個字串序列中查詢。

2)快速體驗

mystr = "Life is short,you need Python。"

print(mystr.count('o'))  # 3

# 在字串標記的範圍內查詢
# 可以只寫開始位置
print(mystr.count('o', 13, 25))  # 1

print(mystr.count('hello'))  # 0

2、字串的修改

所謂修改字串,指的就是通過函式的形式修改字串中的資料。(字串修改的方法很多,我們只講解一下最常用的。)

@1、replace()方法

replace():替換

1)語法

字串序列.replace(舊子串, 新子串, 替換次數)

注意:替換次數如果查出子串出現次數,則替換次數為該子串出現次數。

2)快速體驗

mystr = "hello and String and python and world"

# 1.把字串中的and全部換成he,查出幾次,替換幾次。
# 結果:hello he String he python he world
new_str = mystr.replace('and', 'he')
print(new_str)

# 2。替換次數如果超出子串出現的次數,表示替換所有子串
# 結果:hello he String he python he world
new_str = mystr.replace('and', 'he', 10)
print(new_str)

# 3、查出的子串中,只替換前兩個
# 結果:hello he String he Python and world
new_str = mystr.replace('and', 'he', 2)
print(new_str)

3)注意(重要)

呼叫了replace()方法後,發現原有字串的資料並沒有做到修改,修改後的資料是replace()方法的返回值,說明字串是不可變資料型別。

同時也說明:說明replace()方法有返回值,返回值是修改後的字串。

應該所有關於字串修改的函式,都有返回值,且返回修改後的字串。

總結:資料按照是否能直接修改分為可變型別資料和不可變型別資料兩種。字串型別的資料修改的時候不能改變原有字串,屬於不能直接修改資料的型別即是不可變型別。

@2、split()方法

split()方法:按照指定字元分割字串。返回一個列表,並丟失字串中包含的分割字元。

1)語法

字串序列.split(分割字元, num)

注意:num表示的是分割字元出現的次數,即將來返回資料個數為num+1個。

2)快速體驗

mystr = "hello and String and python and world"

# 1.以and為分割符,分割字串,出現的分割全部分割。
# 結果:['hello ', ' String ', ' python ', ' world']
new_str = mystr.split('and')
print(new_str)

# 2.只把前兩次出現的分割符,進行字串的分割
# 結果:['hello ', ' String ', ' python and world']
new_str = mystr.split('and', 2)
print(new_str)

注意:如果分割字元是原有字串中的子串,分割後則丟失該子串。

@3、join()方法

join()方法:用一個字元或子串合併字串,即將多個字串合併為一個新的字串。

1)語法

字元或子串.join(多字串組成的序列)

2)快速體驗

# 合併列表裡面的字串為一個大的字串
# 結果:aa...bb...cc
mylist = ['aa', 'bb', 'cc']
print('...'.join(mylist))

# 結果:hello world hello python
list1 = ['hello', 'world', 'hello', 'python']
print(' '.join(list1))

@4、capitalize()方法

capitalize()方法:將字串第一個字元轉換成大寫。

程式碼演示如下:

"""
 下面結果可以看到兩點
 1.字串的第一個字元變成大寫了。
 2.除了首字元外,其他字元如有大寫,都變成小寫。
"""
# 結果:Life is short,you need python。
mystr = "life is short,you need Python。"
new_str = mystr.capitalize()
print(new_str)

注意:capitalize()方法轉換後,隻字串第一個字元大寫,其他的字元全都小寫。

@5、title()方法

title()方法:將字串每個單詞首字母轉換成大寫。

程式碼演示如下:

# 將字串中的每個單詞的首字母都轉換成大寫。
# 如果單詞的首字母原本就是大寫,保持不變。
# 結果:Life Is Short,You Need Python。
mystr = "life is short,you need Python。"
new_str = mystr.title()
print(new_str)

@6、lower()方法

lower()方法:將字串中大寫轉小寫。

程式碼演示如下:

# 把字串變成全小寫。
# 結果:life is short,you need python。
mystr = "life is short,You Need Python。"
new_str = mystr.lower()
print(new_str)

@7、upper()方法

upper()方法:將字串中小寫轉大寫。

程式碼演示如下:

# 把字串變成全大寫。
# 結果:LIFE IS SHORT,YOU NEED PYTHON。
mystr = "life is short,You Need Python。"
new_str = mystr.upper()
print(new_str)

@8、lstrip()方法

lstrip()方法:刪除字串左側空白字元。

程式碼演示如下:

# 結果:"Life is short,you need Python。  "
mystr = "   Life is short,you need Python。  "
new_str = mystr.lstrip()
print(new_str)

@9、rstrip()方法

rstrip()方法:刪除字串右側空白字元。

程式碼演示如下:

# 結果:"   Life is short,you need Python。"
mystr = "   Life is short,you need Python。  "
new_str = mystr.rstrip()
print(new_str)

@10、strip()方法

strip()方法:刪除字串兩側空白字元。

程式碼演示如下:

# 結果:"Life is short,you need Python。"
mystr = "   Life is short,you need Python。  "
new_str = mystr.strip()
print(new_str)

@11、ljust()方法

ljust()方法:返回一個原字串左對齊的字串,並使用指定字元(預設空格)填充至對應長度的新字串。

1)語法

字串序列.ljust(長度, 填充字元)

2)示例

# 輸出結果:Pyhton....
mystr = "Pyhton"
new_str = mystr.ljust(10 , ".")
print(new_str)

@12、rjust()方法

rjust()方法:返回一個原字串右對齊的字串,並使用指定字元(預設空格)填充至對應長度的新字串。

語法和ljust()方法相同。

程式碼演示如下:

# 字串序列.rjust(長度, 填充字元)
# 輸出結果:....Pyhton
mystr = "Pyhton"
new_str = mystr.rjust(10 , ".")
print(new_str)

@13、center()方法

center()方法:返回一個原字串居中對齊的字串,並使用指定字元(預設空格)填充至對應長度的新字串。

語法和ljust()方法相同。

程式碼演示如下:

# 字串序列.center(長度, 填充字元)
# 輸出結果:..Pyhton..
mystr = "Pyhton"
new_str = mystr.center(10 , ".")
print(new_str)

"""
 有的時候可能不是絕對居中,
 補充字元數可能是奇數,
 調整長度即可讓補充字元數變成偶數,
 來達到絕對居中效果。
"""

3、字串的判斷

所謂判斷即是判斷真假,返回的結果是布林型資料型別:True 或 False。

@1、startswith()方法

startswith()方法:檢查字串是否是以指定子串開頭,是則返回 True,否則返回 False。如果設定開始和結束位置下標,則在指定範圍內檢查。

1)語法

字串序列.startswith(子串, 開始位置下標, 結束位置下標)

開始位置下標和結束位置下標可以不寫,不寫則是全字串內檢查。

2)快速體驗

mystr = "Life is short,you need Python"

# 結果:True
new_str = mystr.startswith('Li')
print(new_str)

# 結果False
mystr = "Life is short,you need Python"
new_str = mystr.startswith('Li', 3, 15)
print(new_str)

@2、endswith()方法

endswith()方法:檢查字串是否是以指定子串結尾,是則返回 True,否則返回 False。如果設定開始和結束位置下標,則在指定範圍內檢查。

1)語法

字串序列.endswith(子串, 開始位置下標, 結束位置下標)

開始位置下標和結束位置下標可以不寫,不寫則是全字串內檢查。

2)快速體驗

mystr = "Life is short,you need Python"

# 結果:False
new_str = mystr.endswith('thons')
print(new_str)

# 結果:False
new_str = mystr.endswith('thon', 5, 20)
print(new_str)

@3、isalpha()方法

isalpha()方法:如果字串至少有一個字元,並且所有字元都是字母則返回 True, 否則返回 False。

程式碼演示如下:

mystr = "Life is short,you need Python"
mystr1 = 'hello'
mystr2 = 'hello12345'

# 結果:False 因為有空格 
new_str = mystr.isalpha()
print(new_str)

# 結果:True
new_str = mystr1.isalpha()
print(new_str)

# 結果:False 因為有數字
new_str = mystr2.isalpha()
print(new_str)

@4、isdigit()方法

isdigit()方法:如果字串只包含數字則返回 True,否則返回 False。

程式碼演示如下:

mystr = "12345 12345"
mystr1 = 'aaa12345'
mystr2 = '12345'

# 結果: False 因為有空格 
new_str = mystr.isdigit()
print(new_str)

# 結果:False 因為有字母
new_str = mystr1.isdigit()
print(new_str)

# 結果:True
new_str = mystr2.isdigit()
print(new_str)

@5、isalnum()方法

isalnum()方法:如果字串至少有一個字元,並且所有字元都是字母或數字或者字母和數字的組合,則返回 True,否則返回False。

程式碼演示如下:

mystr = "Life is short,you need Python"
mystr1 = 'aaa12345'
mystr2 = '12345-'

# 結果:False 因為有空格
new_str = mystr.isalnum()
print(new_str)

# 結果:True
new_str = mystr1.isalnum()
print(new_str)

# 結果:False 只能是數字或者字母,其他字元都不行
new_str = mystr1.isalnum()
print(new_str)

@6、isspace()方法

isspace()方法:如果字串中只包含空白,則返回True,否則返回False。

程式碼演示如下:

mystr = "Life is short,you need Python"
mystr1 = '     '

# 結果:False
new_str = mystr.isspace()
print(new_str)

# 結果:True
new_str = mystr1.isspace()
print(new_str)

4、補充:Python中方法和函式的區別。

這裡簡單的說一說方法和函式,在Python3中,對方法和函式有明確的規定:

  • 函式function
    A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
    從定義的角度上看,我們知道函式(function)就相當於一個數學公式,它理論上不與其它東西關係,它只需要相關的引數就可以。
  • 方法method
    A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
    那麼方法的意思就很明確了,它是與某個物件相互關聯的,也就是說它的實現與某個物件有關聯關係。這就是方法。雖然它的定義方式和函式是一樣的。也就是說,在Class定義的函式就是方法。(我的理解)
  • 總結:在Python3中方法和函式基本上是一樣。
    只不過方法必須通過物件.方法() 的形式呼叫,如xxx.print() 方法實際上就是和物件關係緊密的函式。
    而函式可以直接使用,如print()

(就先這樣理解,以後學習到函式的時候在詳細說明,這和Java還是有區別的。)

相關文章