一、轉義字符
描述
\(在行尾時) 續行符
\\ 反斜槓符號
\' 單引號
\" 雙引號
\b 退格(Backspace)
\n 換行
\t 橫向製表符
\r 回車
舉例:
a = 'hu\nde\nchao'
print(a) #結果:hu換行de換行chao
b = 'hu\'de\'chao'
print(b) #結果:hu'de'chao
print('abc\
def') #結果:abcdef
二、字符串拼接
1、可以使用+將多個字符串拼接起來。例如:'aa'+ 'bb' ==>'aabb'
(1) 如果+兩邊都是字符串,則拼接
(2) 如果+兩邊都是數字,則加法運算 3+2 ==> 5
(3) 如果+兩邊類型不同,則拋出異常 3+"2" ==> 會報錯
2、可以將多個字面字符串直接放到一起實現拼接。例如:'aa''bb'==> 'aabb'
三、字符串複製
1、使用*可以實現字符串複製:
a = 'sxt'*3
print(a) #結果:SxtSxtSxt
四、不換行打印
1、當調用print時,會自動打印一個換行符,有時,我們不想換行,不想自動添加換行符。我們可以自己通過參數 end = "任意字符串"
print("aa",end="\t")
print("bb",end="\t")
print("cc",end="\t")
結果:aa bb cc
五、從控制檯讀取字符串
使用input()從控制檯讀取鍵盤輸入的內容:
Myname = input("請輸入名稱:")
請輸入名字:"hudechao"
print(myname) #結果:hudechao
input("請輸入:")
該方法會根據用戶輸入的數據類型自動轉換。但有時轉換會報錯,如:
輸入字符串hudechao會報錯未定義,因爲輸入hudechao時,input()方法
判斷爲整型就轉換爲整型所以會報錯,可以改成輸入"hudechao"
raw_input("請輸入:")
該方法將用戶輸入的值只轉換爲字符串,所以輸入123和hudechao,最後的值
都轉換爲了字符串
注:Python3將raw_input()和input()進行整合成了input()去除了raw_input()函數;
其接受任意輸入, 將所有輸入默認爲字符串處理,並返回字符串類型
六、str()實現數字轉型字符串
str()可以幫助我們將其他數據類型轉換爲字符串:
str(5.20) ==>'5.20' str(3.14e2)==>'314.0'
當我們調用 print()函數時,解釋器自動調用了 str()將非字符串的對象轉成了字符串
七、使用[]提取字符
正向搜索:
最左側第一個字符偏移量{即下標索引}是0,第二個字符偏移量是 1,以此類推。直到len(str)-1爲止
反向搜索:
最右側第一個字符偏移量是-1,倒數第二個偏移量是-2,以此類推,直到-len(str)爲止
a = "abcdefghijklmno"
print(a[0]) #結果:a
print(a[3]) #結果:d
print(a[-1]) #結果:o
print(a[-0]) #結果:a
八、replace()實現字符串替換
字符串是"不可改變"的,只能通過創建新的字符串來實現。
整個過程中,實際上我們是創建了新的字符串對象,並指向了變量a,而不是修改了以前的字符串。
a = "abcdefghijklmno"
a = a.replace("c","胡")
print(a) #結果:ab胡defghijklmno
九、字符串切片操作
切片 slice 操作可以讓我們快速的提取子字符串。標準格式爲:
[起始偏移量 start:終止偏移量 end:步長 step] 【步長step指:從某個索引開始往後數兩位不包含該索引位】
操作和說明 示例 結果
[:] 提取整個字符串 "abcdef"[:] "abcdef"
[start:] 從start索引開始到結尾 "abcdef"[2:] "cdef"
[::] 從頭開始到結尾 "abcdef"[::] "abcdef"
[:end] 從頭開始直到end-1 "abcdef"[:2] "ab"
[start:end] 從start到end-1 "abcdef"[2:4] "cd"
[start:end:step] 從start提取到end-1,步長是step "abcdef"[1:5:2] "bd"
【注:帶有終止偏移量end的時候,採取包頭不包尾的方式截取字符串】
其他操作(三個量爲負數)的情況:
示例 說明 結果
"abcdefghiwxyz"[-3:] 倒數三個 "xyz"
"abcdefghij"[-8:-3] 倒數第八個到倒數第三個(包頭不包尾) "cdefg"
"abcdefghij"[::-1] 步長爲負,從右到左反向提取 "jihgfedcba"
注:切片操作時,起始偏移量和終止偏移量不在[0,字符串長度-1]這個範圍,也不會報錯。
起始偏移量小於 0 則會當做 0,終止偏移量大於“長度-1”會被當成-1。
例如:
"abcdefg"[3:50] 結果:"cdefg"
聯繫:
1. 將"to be or not to be"字符串倒序輸出 "to be or not to be"[::-1] 結果:eb ot ton ro eb ot
2. 將"sxtsxtsxtsxtsxt"字符串中所有的s輸出 "sxtsxtsxtsxtsxt"[::3] 結果:sssss
十、split()
可以基於指定分隔符將字符串分隔成多個子字符串(存儲到列表中)。如果不指定分隔符,則默認使用空白字符(換行符/空
格/製表符)
舉例:
a = "a b c d f a m"
print(a.split("a")) #結果:['', ' b c d f ', ' m']
d = "ab cd ef gh"
print(d.split()) #結果:['ab', 'cd', 'ef', 'gh']
十一、join()的作用
和 split()作用剛好相反,用於將一系列子字符串連接起來:
舉例:
a = ["to","be","or","not","to","be"]
print("*".join(a)) #結果:o*be*or*not*to*be
print("".join(a)) #結果:tobeornottobe
比循環效率高!
十二、拼接字符串要點:
使用字符串拼接符+,會生成新的字符串對象,因此不推薦使用+號來拼接字符串。推薦使用join()函數,因爲join函數在拼接字符
串之前會計算所有字符串的長度,然後逐一拷貝,僅新建一次對象
舉例:
import time
a = "a b c d f a m"
print(a.split("a")) #結果:['', ' b c d f ', ' m']
d = "ab cd ef gh"
print(d.split()) #結果:['ab', 'cd', 'ef', 'gh']
a = ["to","be","or","not","to","be"]
print("*".join(a)) #結果:o*be*or*not*to*be
print("".join(a)) #結果:tobeornottobe
time01=time.time() #獲取系統當前時間
b=""
for i in range(1000000):
b+=str(i)
time02=time.time()
print("消耗時間:"+str(time02-time01)) #結果:消耗時間:1.7736153602600098
time03=time.time()
c=[]
for i in range(1000000):
c.append(i)
time04=time.time()
print("消耗時間:"+str(time04-time03)) #結果:消耗時間:0.12497115135192871
十三、字符串駐留
Python中的字符串採用了字符串駐留機制,當需要值相同的字符串的時候(比如標識符),
可以直接從字符串池裏拿來使用,避免頻繁的創建和銷燬,提升效率和節約內存,
因此拼接和修改字符串是會比較影響性能的。
注意:並不是所有的字符串都會採用字符串駐留機制,當且僅當只包含字母、數字、下劃線的字符串纔會採用字符串駐留機制。
舉例1:
a = "hello"
b = "hello"
print(a is b) # 輸出 True
print(a == b) # 輸出 True
舉例2:
a = "hello world"
b = "hello world"
print(a is b) # 輸出 False ,is判斷的是對象的id值
print(a == b) # 輸出 True ,=號比較的是對象的value
注:在PyCharm或者保存爲文件執行,結果是不一樣的,主要是因爲解釋器做了一部分優化
舉例3:
a = 'ab' + 'c' is 'abc'
print(a) # 輸出 True
ab = 'ab'
b = ab + 'c' is 'abc'
print(b) # 輸出 False
注:第一個’ab’+’c’是在compile-time(編譯期)求值的,被替換成了’abc’,所以輸出爲True;第二個示例,ab+’c’是在run-time(運行期)拼接的,導致沒有被自動字符串駐留(intern)
舉例4:
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) # 輸出 False
print(a == b) # 輸出 True
注:a和b是列表,不是同一個對象
舉例5:
a = [1, 2, 3]
b = a
print(a is b) # 輸出 True
print(a == b) # 輸出 True
注:把a的引用複製給b(引用賦值),在內存中其實是指向同一個對象
舉例6:
a = ["I", "love", "Python"]
b = a[:]
print(a is b) # 輸出 False
print(a == b) # 輸出 True
print(a[0] is b[0]) # 輸出 True
print(a[0] == b[0]) # 輸出 True
注:b通過切片操作重新分配了對象(切片賦值),但值和a相同。由於切片拷貝是淺拷貝,這說明列表中的元素並未重新創建,因此a[0] is b[0]輸出爲True
舉例7:
a = 1
b = 1
print(a is b) # 輸出 True
print(a == b) # 輸出 True
注:Python會對比較小的整數對象進行緩存,下次用的時候直接從緩存中獲取
舉例8:
a = 320
b = 320
print(a is b) # 輸出 False
print(a == b) # 輸出 True
注:Python僅僅對比較小的整數對象進行緩存(範圍爲範圍[-5,256]),而並非是所有整數對象。注意,這僅僅是在交互式命令行中執行,而在PyCharm或者保存爲文件執行,結果是不一樣的,主要是因爲解釋器做了一部分優化
十四、字符串比較和同一性
直接使用==,!=對字符串進行比較,是否含有相同的字符,即比較的是該對象的value值。
我們使用 is / not is,判斷兩個對象是否同一個對象。比較的是對象的地址,即 id(obj1)是否和 id(obj2)相等。
十五、成員操作符
in /not in 關鍵字,判斷某個字符(子字符串)是否存在於字符串中。
a = "abcdef"
b = "bcd"
print(b in a) #輸出 True
十六、常用查找方法:
a = "abcdefghiejklmn"
print(len(a))
print(a.startswith("abc"))
print(a.endswith("lmn"))
print(a.find("e"))
print(a.rfind("e"))
print(a.count("e"))
print(a.isalnum())
方法和使用示例 說明 結果
len(a) 字符串長度 15
a.startswith('abc') 以指定字符串開頭 True
a.endswith('lmn') 以指定字符串結尾 True
a.find('e') 第一次出現指定字符串的位置 4
a.rfind('e') 最後一次出現指定字符串的位置 9
a.count("e") 指定字符串出現了幾次 2
a.isalnum() 字符是否只由字母或數字組成 True
十七、去除首位信息
strip(str)方法去除字符串首位指定的字符串,不帶參數時默認去除首位的空格
lstrip(str)方法去除字符串左邊指定信息,不帶參數時默認去除首位的空格
rstrip(str)方法去除字符串右邊指定信息,不帶參數時默認去除首位的空格
print("*s*t*r".strip("*")) #結果:s*t*r
print(" s t r ".strip()) #結果:s t r
print(" s t r ".lstrip()) #結果:s t r (右邊是有空格的)
print(" s t r ".rstrip()) #結果: s t r
十八、大小寫的轉換
a.capitalize() 產生新的字符串,首字母大寫
a.title() 產生新的字符串,每個單詞都首字母大寫
a.upper() 產生新的字符串,所有字符全轉成大寫
a.lower() 產生新的字符串,所有字符全轉成小寫
a.swapcase() 產生新的,所有字母大小寫轉換
a = "gaoqi love programming, love SXT"
print(a.capitalize()) #結果:Gaoqi love programming, love sxt
print(a.title()) #結果:Gaoqi Love Programming, Love Sxt
print(a.upper()) #結果:GAOQI LOVE PROGRAMMING, LOVE SXT
print(a.lower()) #結果:gaoqi love programming, love sxt
print(a.swapcase()) #結果:GAOQI LOVE PROGRAMMING, LOVE sxt
十九、格式排版
a.center(10,"#") 一共10個字符,str居中顯示,剩下的用#號補充
a.center(10) 一共10個字符,str居中顯示,不指定字符時默認用空格補充
a.ljust(10,"#") 一共10個字符,str左對齊,剩下的用#號補充;同理不指定字符時默認用空格補充
a.rjust(10,"#") 一共10個字符,str右對齊,剩下的用#號補充;同理不指定字符時默認用空格補充
a = "sxt"
print(a.center(10,"#")) #結果:###sxt####
print(a.center(10)) #結果: sxt
print(a.ljust(10,"#")) #結果:sxt#######
print(a.rjust(10,"#")) #結果:#######sxt
二十、其他方法
1. isalnum() 字符串是否只由字母或數字組成
2. isalpha() 檢測字符串是否只由字母組成(包含含漢字)。
3. isdigit() 檢測字符串是否只由數字組成。
4. isspace() 檢測是否爲空白符
5. isupper() 是否爲大寫字母
6. islower() 是否爲小寫字母
print("sxt100".isalnum()) #結果:True
print("sxt胡德朝".isalpha()) #結果:True
print("520.13".isdigit()) #結果:False
print("aB".isupper()) #結果:False
print("aB".islower()) #結果:False
print("\t\n".isspace()) #結果:True