首頁 > 軟體

Python學習之字串常用方法總結

2022-03-04 19:00:37

接下來我們會進入 字串常用方法的應用階段,重點學習字串的內建函數。正式學習之前,我們要先了解一個詞 物件 (劃重點,不是男女朋友!),只有知道 物件是什麼?才能更好的幫助我們接下來的學習。

什麼是物件

對於 Python 來說,物件的概念,更像是身份的概念,我們可以理解為 每一個 變數 其實就是 物件。

  • Python 中一切皆是物件
  • 每個物件都有自己的屬性和方法
  • 物件的特點就是它的屬性,它的功能就是它的方法,也可以說是函數。比如字串就有很多內建函數來幫助我們處理字串。

Python 萬物皆是物件

Python裡面有一句話:萬物解釋物件

在程式設計領域中,通常把現實世界中的實體稱為物件,例如:

  • 香蕉、蘋果、橘子
  • 男人、女人、小孩
  • 飛機、地鐵、突突車
  • 平房、樓房、小別墅

物件指的是一個具體的實體,不用於指代一個抽象的群體(或者也可以說是一個實體所處的群體)

  • 香蕉是一個具體的水果,所以可以說香蕉是一個物件
  • 它是一種水果,但水果是一個抽象的概念,指的是一群可食用的含水分和糖分較多的植物果實
  • 你可以說,香蕉、蘋果、橘子是水果,但是不能說水果就只能是香蕉、只能是蘋果、只能是橘子…
  • 所以不能說水果是一個物件

類似的,飛機、地鐵這些具體的交通工具可以被稱為物件,但是不能說交通工具是一個物件

字串的索引

學習字串的常用方法之前,我們再來吻戲一下字串的索引

索引[]

通過索引 [] 獲取字串中指定位置的字元,範例如下:

>>> s = 'Python'
>>> s[0]
'P'
>>> s[1]
'y'
>>> s[2]
't'
>>> s[3]
'h'
>>> s[4]
'0'
>>> s[5]
'n'
  • 在 Python 中,單個字元也被當作字串來處理,即該字串只包含一個字元
  • 在第 2 行,獲取字串 s 的第 0 個字元 ‘P’
  • 在第 4 行,獲取字串 s 的第 1 個字元 ‘y’
  • 在第 6 行,獲取字串 s 的第 1 個字元 ‘t’
  • 在第 8 行,獲取字串 s 的第 1 個字元 ‘h’
  • 在第 10 行,獲取字串 s 的第 1 個字元 ‘o’
  • 在第 12 行,獲取字串 s 的第 1 個字元 ‘n’

索引[:]

在 Python 中,使用語法 string [start:end],獲取字串 string 中在 [start, end) 範圍的子字串。

注意範圍 [start, end) 包含 start,不包含 end。也可以理解為是列表的 左閉右開原則 。

舉例如下:

>>> s = 'Python'
>>> s[1]
'y'
>>> s[2]
't'
>>> s[3]
'h'
>>> s[0:5]
'Pytho'
  • 在第 2 行,獲取字串 s 的第 1 個字元 ‘m’
  • 在第 4 行,獲取字串 s 的第 2 個字元 ‘o’
  • 在第 6 行,獲取字串 s 的第 3 個字元 ‘o’
  • 在第 8 行,獲取字串 s 中從 1 開始、到 4 結束的字串 ‘mooc’,使用 s [1:4] 表示該範圍,注意該範圍包括字串的第 1 個字元、不包括第 4 個字元。

字串的常用方法

find()函數 與 index()函數

find() 函數與 index() 函數的功能:都是返回你想找的成員(元素)的位置

find() 函數的用法:str = string.finde(item) item:想要查詢匹配的元素,返回一個整型

index() 函數的用法:str = string.index(item) item:想要查詢匹配的元素,返回一個整型或者報錯

附:字串裡的位置是從左向右從下標位[0]開始計算

find() 函數與 index() 函數的區別:

  • 如果 find() 函數 找不到c成員(元素),會返回 -1
  • 如果 index()函數 找不到成員(元素),會導致程式報錯
info = "Python is good code"

print(info.find("P"))
print(info.find("good"))
print(info.find("Java"))

# >>> 0
# >>> 10
# >>> -1
info = "Python is good code"

print(info.index("P"))
print(info.index("good"))
print(info.index("Java"))	# 直接報錯(語法錯誤) 'ValueError: substring not found'

# >>> 0
# >>> 10

startswith() 函數與 endswith() 函數

startswith() 函數的功能:判斷字串 開始位 是否是某成員(元素),可以指定統計的範圍,[start,end) 左閉區間右開區間

startswith() 函數的用法:str = string.startswith(item) item:想要查詢匹配的元素,返回一個布林值

endswith() 函數的功能:判斷字串 結尾 是否是某成員(元素),可以指定統計的範圍,[start,end) 左閉區間右開區間

startswith() 函數的用法:str = string.endswith(item) item:想要查詢匹配的元素,返回一個布林值

範例如下:

info = 'Python is good'

print(info.startswith('Python'))
print(info.startswith('Java'))
print(info.endswith('good'))
print(info.endswith('bad'))

# >>> True
# >>> False
# >>> True
# >>> False

string_test = "this is string example"
print(string_test.startswith('this'))           # 字串是否以 this 開頭
print(string_test.startswith('string', 8))      # 從第九個字元開始的字串是否以 string 開頭
print(string_test.startswith('this', 2, 4))     # 從第2個字元開始到第四個字元結束的字串是否以 this 開頭

# >>> True
# >>> True
# >>> False

capitalize () 函數

capitalize 的功能 : 將字串的首字母大寫

capitalize 的用法:str = string.capitalize() ;

範例如下:

>>> str = 'string'
>>> str.capitalize()
'String'

capitalize() 的注意事項:

  • 只對首字母有效
  • 只對字母有效
  • 已經是大寫,則無效

capitalize()函數小練習

將han meimei轉換成規範的英文名字,列印實現姓、名首字母都是大寫

name_1="han"
name_2="meimei"

print(name_1.capitalize() + ' ' +name_2.capitalize())
# >>> 輸出結果 'Han Meimei'

casefold()函數與lower()函數

casefold()函數與lower()函數 的功能 : 將字串的全體字元小寫

casefold()函數與lower()函數 的用法:str = string.casefold() , str = string.lower() ;

範例如下:

>>> str_01 = 'Hello'
>>> str_01.casefold()
'hello'

>>> str_02 = 'World'
>>> str_02.lower()
'world'

casefold()函數與lower()函數 的注意事項:

  • 只對字串的字母有效
  • 已經是小寫的字母無效
chinese = "你好,世界"
english = "Hello,World"
test_str = "test@1.com$OK"

print(chinese.casefold())
print(chinese.lower())
print(english.casefold())
print(english.lower())
print(test_str.casefold())
print(test_str.lower())

既然 casefold()函數與lower()函數 都可以將字串的全體字元轉為小寫,那麼又有什麼區別呢?

其實還是有區別的,lower()函數是很早之前就存在的將字串小寫的方法,而casefold()函數則是 Python3.3版本之後才引入的小寫方法。lower()函數是將英文字元進行小寫,但是對德語等其他非英語字元就失去了效果,這個時候就是 casefold() 函數大顯身手的時候了。

casefold()函數與lower()函數 小練習

將下列三個驗證碼全部轉為 小寫

str_1 = “NAh8”

str_2 = “Sn6H”

str_3 = “HKFM”

str_1 = "NAh8"
str_2 = "Sn6H"
str_3 = "HKFM"

print (str_1.lower())
print (str_2.casefold())
print (str_3.lower())

upper() 函數

upper() 函數的功能:將字串全體大寫

upper() 函數的用法:str = string.upper()

範例如下:

>>> str = 'string'
>>> str.upper()
'STRING'

capitalize 的注意事項:

  • 只對字串的字母有效
  • 已經是大寫的字母無效
str_test = 'Hello World'
print(str_test.upper())
# >>> 'HELLO WORLD'

swapcase() 函數

swapcase() 函數的功能:將字串中的字元進行大小寫轉換

swapcase() 函數的用法:str = string.swapcase()

swapcase() 函數的注意事項:只對字串的字母有效

info_one = 'Python is good'
info_two = 'pthon web is so esay'

print(info_one.swapcase())
print(info_two.swapcase())

zfill() 函數

zfill() 函數的功能:為字串定義長度,如果現有字串長度不滿足,缺少的部分自動用 0 補齊

zfill() 函數的用法:str = string.zfill(width) width:新字串希望的長度

zfill() 函數的注意事項:與字串的字元沒有關係;如果定義的字串長度小於當前字串長度,則不會發生變化。

info = "Hello World"

print(info.zfill(10))
print(info.zfill(15))
print(info.zfill(20))

count() 函數

count() 函數的功能:統計字串出現的次數;或者說返回當前字串某個成員(元素)出現的次數

count() 函數的用法:str = string.zfill(item) item:查詢個數/次數的元素

count() 函數的注意事項:如果查詢的成員(元素)不存在,則返回 0

info = '''
        Please send this message to those people who mean something to you,to those who have touched your life in 	
        one way or another,to those who make you smile when you really need it,to those that make you see the 
        brighter side of things when you are really down,to those who you want to let them know that you appreciate 
        their friendship. And if you don't, don't worry,nothing bad will happen to you,you will just miss out on the 
        opportunity to brighten someone's day with this message.

        '''
this_count = info.count('this')
you_count = info.count('you')
love_count = info.count('love')

print('"this"出現的次數為: ' + str(this_count) + '次')
# >>> "this"出現的次數為: 2次
print('"you"出現的次數為: ' + str(you_count) + '次')
# >>> "you"出現的次數為: 11次
print('"love"出現的次數為: ' + str(love_count) + '次')
# >>> "maybe"出現的次數為: 0次

strip()函數

strip() 函數的功能 :去掉字串兩邊的指定元素,預設是空格

strip() 函數的用法 :str = string.strip(item) ,括弧裡傳一個想要去掉的成員(元素),可以不填寫

strip() 函數的拓展 :

  • 傳入的元素如果不在開頭或者結尾則無效
  • lstrip 僅去掉字串開頭的指定元素或者是空格
  • rstrip 僅去掉字串結尾的指定元素或者是空格

範例如下:

info = '    Jack is a good boy    '
new_info_01 = info.strip()

print(new_info_01)

# >>> Jack is a good boy

new_info_02 = info.strip(info)
print(new_info_02)
print(len(new_info_02))

# >>>          實際上這裡的 'new_info_02' 已經北清空了
# >>> 0        清空後的 'new_info_02' 長度為0

text = 'abcde'
text_lstrip = text.lstrip('a')
print(text_lstrip)

# >>> bcde

text_rstrip = text.rstrip('e')
print(text_rstrip)

# >>> abcd

replace()函數

replace()函數的功能:把字串中的 old(舊字串) 替換成 new(新字串),並可以指定數量,預設 -1 代表替換全部

replace()函數的用法:str = string.replace(old, new, max)

  • old :被替換的元素
  • new:替換 old 的元素
  • max:可選,代表替換幾個,預設替換掉全部匹配到的 old 。

範例如下:

info = "hello, Neo"

print(info.replace("Neo", "Jack"))
print(info.replace(" ", "*", 1))
# >>> hello, Jack
# >>> hello,*Neo

info_test = "hello world !!!"
new_info_01 = info_test.replace("h", "H")
new_info_02 = new_info_01.replace("w", "W")

print(new_info_02.replace('!!!', 'Python'))
# >>> Hello World Python

join() 函數

join()函數的功能:將序列中的元素以指定的字元連線生成一個新的字串

join()函數的用法:str = "".join(lists)

範例如下:

lists = ["a", "b", "c"]
tuples = ("1", "2", "3")

print("*".join(lists))        # >>> a*b*c
print("@".join(tuples))        # >>> 1@2@3

知識點

“”.join(lists) 是常見的將列表、元組轉成字串的寫法

列表裡面只能存放字串元素,有其他型別的元素會報錯 TypeError: sequence item 0: expected str instance, int found

元組也能傳進去

split() 函數

split()函數的功能:將字串按照str分割成列表,如果引數 num 有指定值,則分隔 num+1 個子字串

split()函數的用法:str = string.split() ,括號內可以指定分隔符

使用空格將字串分割為多個單詞,返回一個列表,範例如下:

info = 'Hello World Python Is Good'

print(info.split(" "))			# >>> ['Hello', 'World', 'Python', 'Is', 'Good']
print(info.split(" ", 1))		# >>> ['Hello', 'World Python Is Good']

預設情況下,使用空格將字串分割為多個單詞,可以在 split () 方法中指定分隔符,範例如下:

info = 'Hello World:Python Is_Good'

print(info.split(":"))		# >>> ['Hello World', 'Python Is_Good']

字串中返回 bool 型別的函數集合

之所以說它是集合,是因為我們有多個函數返回的是 bool 型別,接下來我們看看都有哪些函數返回的是 bool 型別。

isspace() 函數

isspace() 函數的功能:判斷字串是否是一個由空格組成的字串

isspace() 函數的用法:isspace_bool_type = string.isspace() ,無引數可傳,返回一個 bool 型別

範例如下:

string = ' '
print(string.isspace())
# >>> True

new_string = 'hello world'
print(new_string.isspace())
# >>> False		雖然 'hello world' 中有一個空格,但是除了空格之外,還有其他字元,所以返回 False

附:這裡需要注意一點,由空格組成的字串不等於空字串,因為空格也佔用一個長度。

istitle() 函數

istitle()函數的功能:判斷字串是否是一個標題型別 (即多個單詞,首字母都是大寫)

istitle()函數的用法:istitle_bool_type = string.istitle() ,無引數可傳,返回一個 bool 型別

範例如下:

info_01 = 'Hello Jack'
info_02 = 'hello jack'

print(info_01.istitle())    # >>> True
print(info_02.istitle())    # >>> False

附:需要注意的是該函數只能對英文有效

isupper() 函數 與 islower() 函數

功能:

  • isupper() 函數 判斷字串中的字元是否都是大寫
  • islower() 函數 判斷字串中的字元是否都是小寫

用法:

  • isupper_bool_type = string.isupper() ,無引數可傳,返回一個 bool 型別
  • islower_bool_type = islower(),無引數可傳,返回一個 bool 型別

範例如下:

text_01 = 'GOOD BYE'

print(text_01.isupper())    # >>> True
print(text_01.islower())    # >>> False

以上就是Python學習之字串常用方法總結的詳細內容,更多關於Python字串的資料請關注it145.com其它相關文章!


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