Python字符串雜談

一、轉義字符          

描述
\(在行尾時)       續行符
\\                反斜槓符號
\'                單引號
\"                雙引號
\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

 

 

發佈了70 篇原創文章 · 獲贊 57 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章