字符串是 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對象。 |