字符串基本特點
字符串的本質是一個字符序列。Python的字符串是不可變的,無法對原字符串做任何修改。可將字符串的一部分復制到新創建的字符串,達到看起來修改的效果
Python不支持單字符類型,單字符也是作為一個字符串使用的。
字符串的編碼
直接支持Unicode,可表示世界上任何書面語言。16位表示一個字符,ASCII碼是Unicode的子集
使用內置函數ord()可以把字符轉換成對應的Unicode碼
使用內置函數chr()可以把十進制數字轉換成對應字符串
引號創建字符串
通過單引號或雙引號創建字符串
a = "I'm a teacher" print(a)
b = 'My name is "TOM"' print(b)
連續三個單引號或三個雙引號,可以創建多行字符串。
resume = ''' name="gaoqi" company = "six" age= 18 lover = "TOM"''' print(resume)
空字符串和len()函數
Python允許空字符串的存在,不包含任何字符且長度為0
len()用於計算字符串中包含多少字符
轉義字符
轉義字符 | 描述 |
\(在行尾時) | 續行符 |
\\ | 反斜杠符號 |
\' | 單引號 |
\" | 雙引號 |
\b | 退格 |
\n | 換行 |
\t | 橫向制表符 |
\r | 回車 |
字符串拼接
1.可以使用+將多個字符串拼接起來。 'aa'+'bb'==>'aabb'
① 如果+兩邊都是字符串,則拼接
②如果+兩邊都是數字,則加法運算
③如果+兩邊類型不同,則拋出異常
2.可以將多個字符串直接放到一起實現拼接。例如: 'aa' 'bb'==>'aabb'
字符串復制
使用*可是實現字符串的復制
【操作】字符串的復制操作
>>> a = 'Sxt'*3 >>> a 'SxtSxtSxt'
不換行打印
print()會自動打印一個換行符。若不想換行,可以自己通過修改end='任意字符串'。實現末尾添加任何內容
print("dhg",end='') print("dhg",end='##') print("dhg")
輸出:
dhgdhg##dhg >>>
從控制台讀取字符
使用input()從控制台讀取鍵盤輸入的內容
myname = input("請輸入姓名:")
str()實現數字轉型字符串
str()可以實現其它數據類型轉換為字符串
str(5.20)==>'5.20' str(3.14e2) ==> '314' str(True)= 'True'
使用[ ]提取字符
在字符串后面加[],在[]里面指定偏移量,可以提取該位置的單個字符
正向搜索:
最左側第一個字符,偏移量是0,第二個偏移量是1,以此類推。直到len(str) -1
反向搜索
最右側第一個字符,偏移量是-1,倒數第二個是-2,以此類推,直到-len(str)
>>> a='qwertyuiopasdfghjklzxcvbnm' >>> a 'qwertyuiopasdfghjklzxcvbnm' >>> a[0] 'q' >>> a[3] 'r' >>> a[26-1] 'm' >>> a[-1] 'm' >>> a[-26] 'q'
replace()實現字符串替換
字符串是不可改變的,可以通過創建新的字符串來實現
>>> a='qwertyuiopasdfghjklzxcvbnm' >>> a.replace('c','高') 'qwertyuiopasdfghjklzx高vbnm'
字符串切片slice操作
切片slice操作可以快速提取子串
[start : end :step] (包頭不包尾)
[:] 提取整個字符串
[start:] 從start開始到結束
[:end] 從0開始到end-1
[start:end] 從start 到end-1
split()分割和join()合並
split()可以基於指定分隔符將字符串分割成多個子字符串。若不指定分隔符,則默認使用空白字符(換行、空格、制表)
>>> a = "to be or not to be" >>> a.split() ['to', 'be', 'or', 'not', 'to', 'be']
join()的作用和split()作用剛相反,用於將一系列子字符串連接起來
>>> a = ['six','six100','six200'] >>> "*".join(a) 'six*six100*six200'
字符串拼接要點:
使用字符串拼接+,會生成新的字符串對象,因此不推薦使用+來拼接字符串。推薦使用join()函數,因為join()函數在拼接字符串之前會計算所有字符串的長度,然后逐一拷貝,僅新建一次對象
字符串駐留機制和字符串比較
字符串駐留:僅保存一份相同且不可變的字符串的方法,不同的值被存放在字符串駐留池中。Python支持字符串駐留機制,對於符合標識符規則的字符串(下划線 字母 數字),會啟用字符串駐留機制
>>> a = "abd_33" >>> b = "abd_33" >>> a is b True >>> c = "dd#" >>> d = "dd#" >>> c is d False
成員操作符
in/not in 關鍵字,判斷某個字符(子字符串)是否存在於字符串中
字符串常用方法匯總
常用查找方法
方法 | 說明 |
len(a) | 字符串長度 |
a.startswith("子字符串") | 是否以某字符串開頭 |
a.endswith("子字符串") | 是否以某字符串結尾 |
a.find("子字符串") | 第一次出現指定字符串的位置 |
a.rfind("子字符串") | 最后一次出現指定字符串的為位置 |
a.count("子字符串") | 指定字符串出現了幾次 |
a.isalnuma() | 是否所有字符全是字母或數字 |
去除首尾信息
可通過strip()去除字符串首尾指定信息。通過lstrip()去除字符串左側指定信息,rstrip()去除字符串右側指定信息
大小寫轉換
示例 | 說明 |
a.capitalzie() | 產生新的字符串,首字母大寫 |
a.title() | 產生新的字符串,每個單詞首字母都大寫 |
a.upper() | 產生新的字符串,所有字母都轉換成大寫 |
a.lower() | 產生新的字符串,所有字母都轉換成小寫 |
a.swapcase() | 產生新的字符串,所有字母大小寫交換 |
格式排版
center()、ljust()、rjust()這三個函數用於對字符串實現排版
>>> a = "SXT" >>> a.center(10,"*") '***SXT****' >>> a.center(10) ' SXT ' >>> a.ljust(10,"*") 'SXT*******' >>> a.rjust(10,"*") '*******SXT'
其它方法
- isalnum() 是否為字母或數字
- isalpha() 檢測字符串是否只由字母組成(含漢字)
- isdigit() 檢測字符串是否只由數字組成
- isspace() 檢測是否為空白符
- isupper() 是否為大寫字母
- islower() 是否為小寫字母
字符串格式化
format()基本使用方法
str.format(),增強了字符串格式化的功能,通過{}和:來替代以前的%
format函數可以接受不限個參數,位置可以不按順序
>>> a = "姓名是:{0},年齡是:{1}" >>> a.format("張三",19) '姓名是:張三,年齡是:19' >>> a.format("高希希",6) '姓名是:高希希,年齡是:6' >>> b = "姓名是:{0},年齡是:{1},:{0}是個好小伙" >>> b.format("張三",22) '姓名是:張三,年齡是:22,:張三是個好小伙' >>> c = "名字是{name},年齡是{age}" >>> c.format(age=22,name="張三") '名字是張三,年齡是22'
通過{索引}/{參數名},直接映射參數值,實現對字符串的格式化,非常方便。
填充與對齊
填充常和對齊一起使用
^ < > 分別是居中、左對齊、右對齊,后面帶寬度
:后面帶填充的字符,只能是一個字符,不指定的話默認用空格填充
>>> "{:*>8}".format(234) '*****234' >>> "我是{0},我喜歡數字{1:*>8}".format("張三",666) '我是張三,我喜歡數字*****666'
數字格式化
a = "我是{0},我的存款有{1:.2f}" >>> a.format("張三",38888.234342) '我是張三,我的存款有38888.23'
可變字符串
Python中,字符串屬於不可變對象,不支持原地修改,如果需要修改其中的值,只能創建新的字符串對象。但是,經常我們需要原地修改字符串,可以使用io.StringIO對象或array模塊
>>> import io >>> s = "hello,sxt" >>> sio = io.StringIO(s) >>> sio <_io.StringIO object at 0x000001BEAAE53F70> >>> sio.getvalue() 'hello,sxt' >>> sio.seek(7) 7 >>> sio.write("g") 1 >>> sio.getvalue() 'hello,sgt'