python 基礎:字串詳解
阿新 • • 發佈:2018-12-10
import os import linecache import string """ python 基礎之資料型別學習筆記 主要內容如下: 字串的引用的解釋,修改,拼接,刪除,子串的查詢,分割,切片 """ #字串 #字串在python 中是不可改變的值,這點與java很相似,字串是一個引用變數, #也就是在python的虛擬機器中維護一個字串專門的空間,對兩個字串值相同的變數,實際上同一個變數。 #字串1 a="abcdef" #字串2 b="abcdef" #檢視兩個字串在記憶體中識別符 print(id(a)) #2937199059216 print(id(b)) #2937199059216 #"改變"字串1 a="abcdefgh" #檢視識別符號 print(id(a)) #2071341216880 #結論:字串改變不是改變的值本身,而是改變了變數的引用物件 #字串的編碼 #字串1 a='this is a test example.' #字串2 b='這是一個測試用例。' #輸出兩個字串的長度 print('a:',len(a)) #a: 23 print('b:',len(b)) #b: 9 #以上編碼在我的環境下預設是用的utf-8進行編輯的,所以漢字字元是能夠進行正確識別的,如果不是使用utf-8進行編碼的話, #將會出現錯誤。這時,需要利用字串的encode()方法進行編碼的轉換。 #兩個字串的拼接 #字串1 a='abcdefg' #字串2 b='hijklmn' #第一種拼接方法:利用連線符 c=a+b print(c) #abcdefghijklmn #說明:該方法在拼接數量較少時,使用比較方便,同樣顯示也比較直觀, #但在拼接的數量較多的時候,會消耗大量的記憶體, #第二種方法:格式化的方法: #利用%s進行格式化 d="%s%s" % (a,b) print(d) #abcdefghijklmn #利用string的format方法進行格式化: e="{a}{b}".format(a=a,b=b) print(e) #abcdefghijklmn #第三種方法:利用string的join方法 f=''.join([a,b]) print(f) #abcdefghijklmn #字串的修改: a='abcDEf' print(id(a)) # 2074274992680 a=a.replace('DE','de') print(id(a)) # 2074274993352 print(a) # abcdef #雖然可以改變字串中的值,但是從本質上來講,修改後的字串不是原先的字串了,而將變數指向了一個新的字串 #查詢字串的子串 a="I'm a student,my name is zhangsan,my hometown is New York,my phone number is 333-4445" print(a.find('zhangsan')) # 25 print(a.index('zhangsan')) # 25 print(a.find('Lisi')) # -1 # print(a.index('Lisi')) # ValueError: substring not found #結論:從查詢的結果上來看,如果說查詢的字串中存在子串,則不會影響,但如果不存在 ,find會返回一個-1,而index則會返回一個錯誤。 print(a.find('my')) #14 #find預設是查詢到的子串第一次出現的位置 print(a.count('my')) #3 #在字串有多個子串,在查詢的時候,我們可以利用對查詢的起始位置進行限制 print(a.find('my',15)) #34 print(a.find('my',35)) #58 print(a.replace('my',"My")) # I'm a student,My name is zhangsan,My hometown is New York,My phone number is 333-4445 #所有的符合條件的字元被替換 print(a.replace('my',"My",1)) # I'm a student,My name is zhangsan,my hometown is New York,my phone number is 333-4445 print(a.replace('my',"My",2)) # I'm a student,My name is zhangsan,My hometown is New York,my phone number is 333-4445 #在replace中也有一個可選引數,如果不指定,則會將所有的替換,如果指定,則只替換指定的個數, #字串的分割: a="I'm a student,my name is zhangsan,my hometown is New York,my phone number is 333-4445" #將上面的字串按空格進行分割 b=a.split(' ') print(type(b)) # <class 'list'> print(b) # ["I'm", 'a', 'student,my', 'name', 'is', 'zhangsan,my', 'hometown', 'is', 'New', 'York,my', 'phone', 'number', 'is', '333-4445'] #可以看出,上面的字串按空格被分割成了一個list #將上面得到的list進行還原 c=' '.join(b) #注意join前面的字串是一個擁有一個空格的字串 print(c) # I'm a student,my name is zhangsan,my hometown is New York,my phone number is 333-4445 #字串的刪除 a='test' del a # print(a) #NameError: name 'a' is not defined #說明:其本質上是刪除了一個變數 #字串的切片: #字串在本質上也是一種序列化的結構,所以能夠使用遊標的方式進行訪問,所以能夠進行切片的訪問 #基本的使用: a='abcdefghijklmn' #訪問固定位置: print(len(a)) # 14 print(a[0]) # a # print(a[14]) # IndexError: string index out of range # 說明:字串的遊標是從0開始進行計數的,其他位置與我們實際生活中數的位置差1 #取出字串的abc print(a[0:3]) # abc print(a[:3]) # abc,預設從最開始的位置開始,所以0可以省略 print(a[-14:-11]) # abc,數表示從右邊開始數起,但起始的相對位置不變,第一個表示開始位置,第二個表示結束位置的下一位 #取出字元acegikm print(a[0:14:2]) # acegikm,第三個數表示步進 print(a[::2]) # acegikm,對整個字串來講,開始和結束的預設位置都可以省略,也可以省略一個 print(a[0::2]) # acegikm print(a[:14:2]) # acegikm