Python字符串(Str)詳解


字符串是 Python 中最常用的數據類型。我們可以使用引號('或")來創建字符串。

  創建字符串很簡單,只要為變量分配一個值即可

字符串的格式

b = "hello itcast.cn"
#    或者
b = 'hello itcast.cn'
  • 雙引號或者單引號中的數據,就是字符串

字符串連接的方法

直接通過加號(+)操作符連接

a = "str1"
b = "str2"
c = a + b
print("a:%s" % a)  # a:str1
print("b:%s" % b)  # b:str2
print("c:%s" % c)  # c=a+b:str1str2

join方法

join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串

  • 'sep'.join(seq)
    參數說明
    sep:分隔符。可以為空
    seq:要連接的元素序列、字符串、元組、字典
    上面的語法即:以sep作為分隔符,將seq所有的元素合並成一個新的字符串

返回值:返回一個以分隔符sep連接各個元素后生成的字符串

listStr = ['python', 'tab', '.com', 'wqetab', 'ew.com']
print(listStr)
website = '++'.join(listStr)
print(website) # python++tab++.com

替換

例子:

a = "str1"
b = "str2"
e = "===%s===" % (a + b)
print("a:%s" % a)  # a:str1
print("b:%s" % b)  # b:str2
print("e:%s"%e)    # e:===str1str2===

總結

下面再來說一下三種方法的不同

  • 方法1,使用簡單直接,但是網上不少人說這種方法效率低
      之所以說python 中使用 + 進行字符串連接的操作效率低下,是因為python中字符串是不可變的類型,使用 + 連接兩個字符串時會生成一個新的字符串,生成新的字符串就需要重新申請內存,當連續相加的字符串很多時(a+b+c+d+e+f+...) ,效率低下就是必然的了

  • 方法2,使用略復雜,但對多個字符進行連接時效率高,只會有一次內存的申請。而且如果是對list的字符進行連接的時候,這種方法必須是首選

  • 方法3:字符串格式化,這種方法非常常用

  加號連接效率低是在連續進行多個字符串連接的時候出現的,如果連接的個數較少,加號連接效率反而比join連接效率高

Python字符串運算符

下表實例變量 a 值為字符串 "Hello",b 變量值為 "Python":

操作符 描述 實例
+ 字符串連接 >>>a + b
'HelloPython'
* 重復輸出字符串
>>>a ✲2
'HelloHello'
[] 通過索引獲取字符串中字符 >>>a[1]
'e'
[ : ] 截取字符串中的一部分 >>>a[1:4]
'ell'
in 成員運算符 - 如果字符串中包含給定的字符返回 True
>>>"H" in a
True
not in 成員運算符 - 如果字符串中不包含給定的字符返回 True
>>>"M" not in a
True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思來使用,沒有轉義特殊或不能打印的字符。 原始字符串除在字符串的第一個引號前加上字母"r"(可以大小寫)以外,與普通字符串有着幾乎完全相同的語法。 >>>print r'\n'
\n
>>> print R'\n'
\n

字符串操作

  關於字符串的方法還是比較多的,我把感覺常用的分了下類,把它們寫了下來希望對你們有個參考,最后也把關於字符串的方法在在最后附着,有空可以看看

字符串的格式操作

  • 去掉不需要的字符(默認為空格)

  • s.strip()去掉字符串兩端字符

  • lstrip()去掉字符串左端字符

  • rstrip()去掉字符串右端字符

s = ' abc 123 '
s.strip()
# 'abc 123'

 s.lstrip()
# 'abc 123 '
 
s = '-----ab+++++'
s.strip('-+')  # 'ab'
  • 字符串在輸出時的對齊
  • S.ljust(width,[fillchar]) #輸出width個字符,S左對齊,不足部分用fillchar填充,默認的為空格。
  • S.rjust(width,[fillchar]) #右對齊
  • S.center(width, [fillchar]) #中間對齊
  • S.zfill(width) #把S變成width長,並在右對齊,不足部分用0補足
  • 使用format方法(見上篇文章
s='abc'
format(s,'>10')
# '       abc'
  • 對字符串的大小寫字母進行轉換

  • S.lower() #小寫

  • S.upper() #大寫

  • S.swapcase() #大小寫互換

  • S.capitalize() #首字母大寫

  • String.capwords(S) #這是模塊中的方法。它把S用split()函數分開,然后用capitalize()把首字母變成大寫,最后用join()合並到一起

>>> s = 'stiven'
>>> s.swapcase()
'STIVEN'
>>> s = 'SHAW'
>>> s.swapcase()
'shaw'

字符串的截取(重點)

  • 切片的語法:字符串[起始:結束:步長]
    注意:選取的區間屬於左閉右開型,即從"起始"位開始,到"結束"位的前一位結束(不包含結束位本身)。

  • str[0:3] #截取第一位到第三位的字符

  • str[:] #截取字符串的全部字符

  • str[0::2]# 以步長為2,截取字符串的全部字符

  • S.replace(repl,string)
    repl,就是replacement,被替換,的字符串的意思。repl是字符串
    string,即表示要被處理,要被替換的那個string字符串。


s='python|c|java|c++|php'
s.replace(r'|',"語言:")
# 'python語言:c語言:java語言:c++語言:php'
  • S.split([sep, [maxsplit]]) #以sep為分隔符,把S分成一個list。maxsplit表示分割的次數。默認的分割符為空白字符
  • re.split(format,str) # format:正則表達式,str:字符串;需要導入re 工具箱
import re
s='python|c|java|c++|php'
re.split(r'[|]',s)
# ['python', 'c', 'java', 'c++', 'php']
  • re.sub(pattern, repl, string) 對於輸入的一個字符串,利用正則表達式(的強大的字符串處理功能),去實現(相對復雜的)字符串替換處理,然后返回被替換后的字符串
    pattern,表示正則中的模式字符串
    repl,就是replacement,被替換,的字符串的意思。repl可以是字符串,也可以是函數
    string,即表示要被處理,要被替換的那個string字符串。
import re
s='python|c|java|c++|php'
re.sub(r'[|]',"語言:",s)
'python語言:c語言:java語言:c++語言:php'

符串的測試、判斷函數

  • strcmp(sStr1,sStr2) #比較字符串
  • S.startswith(prefix[,start[,end]]) #是否以prefix開頭
  • S.endswith(suffix[,start[,end]]) #以suffix結尾
  • S.isalnum() #是否全是字母和數字,並至少有一個字符
  • S.isalpha() #是否全是字母,並至少有一個字符
  • S.isdigit() #是否全是數字,並至少有一個字符
  • S.isspace() #是否全是空白字符,並至少有一個字符
  • S.islower() #S中的字母是否全是小寫
  • S.isupper() #S中的字母是否便是大寫
  • S.istitle() #S是否是首字母大寫的

字符串中的搜索

  • S.find(substr, [start, [end]]) #返回S中出現substr的第一個字母的標號,如果S中沒有substr則返回-1。start和end作用就相當於在S[start:end]中搜索
  • S.index(substr, [start, [end]]) #與find()相同,只是在S中沒有substr時,會返回一個運行時錯誤
  • S.rfind(substr, [start, [end]]) #返回S中最后出現的substr的第一個字母的標號,如果S中沒有substr則返回-1,也就是說從右邊算起的第一次出現的substr的首字母標號
  • S.rindex(substr, [start, [end]])
  • S.count(substr, [start, [end]]) #計算substr在S中出現的次數

字符串的方法的api

方法 描述
string.capitalize() 把字符串的第一個字符大寫
string.center(width) 返回一個原字符串居中,並使用空格填充至長度 width 的新字符串
string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數
string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式解碼 string,如果出錯默認報一個 ValueError 的 異 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'
string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式編碼 string,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'
string.endswith(obj, beg=0, end=len(string)) 檢查字符串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的范圍內是否以 obj 結束,如果是,返回 True,否則返回 False.
string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8。
string.find(str, beg=0, end=len(string)) 檢測 str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內,如果是返回開始的索引值,否則返回-1
string.format() 格式化字符串
string.index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過如果str不在 string中會報一個異常.
string.isalnum() 如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False
string.isalpha() 如果 string 至少有一個字符並且所有字符都是字母則返回 True,否則返回 False
string.isdecimal() 如果 string 只包含十進制數字則返回 True 否則返回 False.
string.isdigit() 如果 string 只包含數字則返回 True 否則返回 False.
string.islower() 如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False
string.isnumeric() 如果 string 中只包含數字字符,則返回 True,否則返回 False
string.isspace() 如果 string 中只包含空格,則返回 True,否則返回 False.
string.istitle() 如果 string 是標題化的(見 title())則返回 True,否則返回 False
string.isupper() 如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是大寫,則返回 True,否則返回 False
string.join(seq) 以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合並為一個新的字符串
string.ljust(width) 返回一個原字符串左對齊,並使用空格填充至長度 width 的新字符串
string.lower() 轉換 string 中所有大寫字符為小寫.
string.lstrip() 截掉 string 左邊的空格
string.maketrans(intab, outtab]) maketrans() 方法用於創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
string.partition(str) 有點像 find()和 split()的結合體,從 str 出現的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組
(string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
string.rfind(str, beg=0,end=len(string) ) 類似於 find()函數,不過是從右邊開始查找.
string.rindex( str, beg=0,end=len(string)) 類似於 index(),不過是從右邊開始.
string.rjust(width) 返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串
string.rpartition(str) 類似於 partition()函數,不過是從右邊開始查找.
string.rstrip() 刪除 string 字符串末尾的空格.
string.split(str="", num=string.count(str)) 以 str 為分隔符切片 string,如果 num有指定值,則僅分隔 num 個子字符串
string.splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。
string.startswith(obj, beg=0,end=len(string)) 檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定范圍內檢查.
string.strip([obj]) 在 string 上執行 lstrip()和 rstrip()
string.swapcase() 翻轉 string 中的大小寫
string.title() 返回"標題化"的 string,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())
string.translate(str, del="") 根據 str 給出的表(包含 256 個字符)轉換 string 的字符,要過濾掉的字符放到 del 參數中
string.upper() 轉換 string 中的小寫字母為大寫
string.zfill(width) 返回長度為 width 的字符串,原字符串 string 右對齊,前面填充0
string.isdecimal() isdecimal()方法檢查字符串是否只包含十進制字符。這種方法只存在於unicode對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM