『壹』 python深拷貝和淺拷貝的區別
淺拷貝是對一個對象父級(外層)的拷貝,並不會拷貝子級(內部),而深拷貝對一個對象是所有層次的拷貝(遞歸),內部和外部都會被拷貝過來。
使用淺拷貝的時候,分為兩種情況。
第一種,如果最外層的數據類型是可變的,比如說列表,字典等,淺拷貝會開啟新的地址空間去存放。
『貳』 Python的字元串切片及常用方法
獲取Python字元串中的某字元可以使用索引:
截取字元串中的一段字元串可以使用切片,切片在方括弧中使用冒號:來分隔需要截取的首尾字元串的索引,方式是包括開頭,不包括結尾
當尾索引沒有給出時,默認截取到字元串的末尾
當頭索引沒有給出的時候默認從字元串開頭開始截取
當尾索引和頭索引都沒有給出的時候,默認返回整個字元串,不過這只是一個淺拷貝
當尾索引大於總的字元串長度時,默認只截取到字元串末尾,很明顯使用這種方法來截取一段到字元串末尾的子字元串是非常不明智的,應該是不給出尾索引才是最佳實踐
當頭索引為負數時,則是指從字元串的尾部開始計數,最末尾的字元記為-1,以此類推,因此此時應該注意尾索引的值,尾索引同樣可以為負數,如果尾索引的值指明的字元串位置小於或等於頭索引,此時返回的就是空字元串
切片是Python中截取字元串最強大的功能。
以下列舉部分Python字元串常用的方法:
『叄』 Python字元串
字元串 :在python中是作為序列存在的,序列中的元素具有從左到右的順序,並根據他們的相對位置進行讀取和儲存。嚴格意義來說,字元串是一系列單個字元組成的序列,其他類型的序列還包括列表和元組。在一串字元兩側加上雙引號或者單引號即可創建字元串。
注意 :如果字元串中需要出現雙引號或者單引號,則有兩種方法。
1)使用轉義字元()進行轉義。
2)將雙引號和單引號配合使用,即若向想列印單引號,可以使用雙引號表示字元串,在字元串中只用一個單引號。反之亦然。
在一個字元串前面加上r;則會自動為字元串中的反斜杠轉義,使其只代表一個反斜杠。但是注意,原始字元串最後不能有反斜杠,否則會發生語法錯誤。如果非要在原始字元串最後加上,則可以寫為。
運行結果為:
有時我們需要創建一個跨行的字元串,則可以使用三引號來創建。
運行結果為
1)可以通過len()函數得到序列的長度。
運行結果為:
2)可以通過索引操作得到序列的各個元素值。python中序列的索引是從0開始依次向後推移。
運行結果為:
3)python還支持反向索引,是從最後一個向前推移的。-1是指序列中的最後一個元素值,-len(str)是指該序列的第一個元素值。
運行結果為:
4)序列還支持一種 分片(slice) 的操作,這是一種能夠一步提取整個分片的方法。
分片可以看作是字元串中一部提取出其中一部分的方法。其一般形式為:X[I:J],表示從X序列中取出第I個元素到不包含第J個元素的部分,結果為返回一個新的對象。
運行結果為:
在一個分片(slice)中,左邊界默認為0。同時應注意負偏移量在分片中的邊界,也應為左側數字比右側數字小。拷貝全部字元串的用法為str[:]。
運行結果為:
5)作為一個序列,字元串還支持用「+」來合並字元串。
運行結果為:
6) 不可變性 ,python中字元串具有不可變性,在創建一個字元串之後不可以通過對其某一位置進行賦值而改變該字元串,但可以通過創建一個新的字元串並以同一個變數名命名。
運行結果為:
7)除了一般的序列操作,字元串還有一些其特有的操作方法。
如find()方法,可以用於查找一個子字元串,可以返回該子字元串的索引值。但如果存在多個符合的子字元串,只會返回第一個索引值。如果不存在該子字元串,則返回-1。replace(S1,S2)方法會將字元串中的S1替換為S2。
運行結果如下:
關於字元串,python還有許多內置函數,可以通過調用dir()函數來查看。
『肆』 Python處理字元串必備方法
字元串是Python中基本的數據類型,幾乎在每個Python程序中都會使用到它。
▍1、Slicing
slicing切片,按照一定條件從列表或者元組中取出部分元素(比如特定范圍、索引、分割值)
▍2、****strip()
strip()方法用於移除字元串頭尾指定的字元(默認為空格或換行符)或字元序列。
在使用strip()方法時,默認去除空格或換行符,所以#號並沒有去除。
可以給strip()方法添加指定字元,如下所示。
此外當指定內容不在頭尾處時,並不會被去除。
第一個 前有個空格,所以只會去取尾部的換行符。
最後strip()方法的參數是剝離其值的所有組合,這個可以看下面這個案例。
最外層的首字元和尾字元參數值將從字元串中剝離。字元從前端移除,直到到達一個不包含在字元集中的字元串字元為止。
在尾部也會發生類似的動作。
▍3、****lstrip()
移除字元串左側指定的字元(默認為空格或換行符)或字元序列。
同樣的,可以移除左側所有包含在字元集中的字元串。
▍4、rstrip()
移除字元串右側指定的字元(默認為空格或換行符)或字元序列。
▍5、****removeprefix()
Python3.9中移除前綴的函數。
和strip()相比,並不會把字元集中的字元串進行逐個匹配。
▍6、removesuffix()
Python3.9中移除後綴的函數。
▍7、****replace()
把字元串中的內容替換成指定的內容。
▍8、****re.sub()
re是正則的表達式,sub是substitute表示替換。
re.sub則是相對復雜點的替換。
和replace()做對比,使用re.sub()進行替換操作,確實更高級點。
▍9、****split()
對字元串做分隔處理,最終的結果是一個列表。
當不指定分隔符時,默認按空格分隔。
此外,還可以指定字元串的分隔次數。
▍10、****rsplit()
從右側開始對字元串進行分隔。
▍11、****join()
string.join(seq)。以string作為分隔符,將seq中所有的元素(的字元串表示)合並為一個新的字元串。
▍12、****upper()
將字元串中的字母,全部轉換為大寫。
▍13、****lower()
將字元串中的字母,全部轉換為小寫。
▍14、capitalize()
將字元串中的首個字母轉換為大寫。
▍15、****islower()
判斷字元串中的所有字母是否都為小寫,是則返回True,否則返回False。
▍16、isupper()
判斷字元串中的所有字母是否都為大寫,是則返回True,否則返回False。
▍17、****isalpha()
如果字元串至少有一個字元並且所有字元都是字母,則返回 True,否則返回 False。
▍18、isnumeric()
如果字元串中只包含數字字元,則返回 True,否則返回 False。
▍19、isalnum()
如果字元串中至少有一個字元並且所有字元都是字母或數字,則返回True,否則返回 False。
▍20、count()
返回指定內容在字元串中出現的次數。
▍21、****find()
檢測指定內容是否包含在字元串中,如果是返回開始的索引值,否則返回-1。
此外,還可以指定開始的范圍。
▍22、rfind()
類似於find()函數,返回字元串最後一次出現的位置,如果沒有匹配項則返回 -1。
▍23、startswith()
檢查字元串是否是以指定內容開頭,是則返回 True,否則返回 False。
**
**
▍24、****endswith()
檢查字元串是否是以指定內容結束,是則返回 True,否則返回 False。
▍25、****partition()
string.partition(str),有點像find()和split()的結合體。
從str出現的第一個位置起,把字元串string分成一個3 元素的元組(string_pre_str,str,string_post_str),如果string中不包含str則 string_pre_str==string。
▍26、center()
返回一個原字元串居中,並使用空格填充至長度width的新字元串。
▍27、ljust()
返回一個原字元串左對齊,並使用空格填充至長度width的新字元串。
▍28、rjust()
返回一個原字元串右對齊,並使用空格填充至長度width的新字元串。
▍29、f-Strings
f-string是格式化字元串的新語法。
與其他格式化方式相比,它們不僅更易讀,更簡潔,不易出錯,而且速度更快!
▍30、swapcase()
翻轉字元串中的字母大小寫。
▍31、zfill()
string.zfill(width)。
返回長度為width的字元串,原字元串string右對齊,前面填充0。
參考文獻: https://mp.weixin.qq.com/s/9cuO-KL3g9ldqRGGZBVnjw
『伍』 python中如何把一行字元串復制為兩行
加上換行嗎
string=string+「\n」+string+"\n"
這樣?
『陸』 Python3 & 淺拷貝與深拷貝
在Python中對象的賦值(=)其實就是對象的引用。即:當創建一個對象,把它賦值給另一個變數時,python並沒有拷貝這個對象,只是拷貝了這個對象的引用而已。
Python中對象的拷貝分為:淺拷貝()和深拷貝(deep)。
淺拷貝:拷貝了最外圍的對象本身,內部的元素都只是拷貝了一個引用而已。也就是,將原對象在內存中引用地址拷貝過來,然後讓新的對象指向這個地址。可以使用「=」或列表自帶的()函數(如list.()),或使用模塊的()函數。
深拷貝:外圍和內部元素磨碰都進行了拷貝對象本身,而不是引用。即把對象復制一遍,並且該對象中引用的其他對象也同時復制,完全得到一個新的一模一樣的對象,對新對象里的值進行修改不會影響原有對象,新對象和原對象完全分離開。深拷貝只能使用模塊中deep()函數,使用前要含高導入:from import deep。
Python中對象分為不可變對象 、可變對象。
不可變對象:一旦創建就不可修改的對象,例如:字元串、元組、數字
可變對象:可以修改的對象,例如:列表、字典。
其中Python中的切片可以應用於:列表、元組、字元串,但不能應用於字典。
而深淺拷貝,可應用於序列(列表、元組、字元串),也可應用於字典。
其中不可變對象,不管是深拷貝還是淺拷貝,地址值在拷貝後的值都是一樣的。
以下以元組(不可變類型)為例
從上述示例可以看出:
不可變對象類型,沒有被拷貝的說法,即便是用深拷貝,查看id的話也是一樣的,如果對其重新賦值,也只是新創建一個對象,替換掉舊的而已。
所以不可變類型,不管是深拷貝還是淺拷貝,地址值和拷貝後的值都是一樣的。
以下以列瞎老談表(可變類型)為例
第一種方法:使用=號淺拷貝
輸出結果:
第二種方法:使用淺拷貝
輸出結果:
第三種方法:使用deep深拷貝
輸出結果:
從上述示例可以看出:
=淺拷貝:值相等,地址相等
淺拷貝:值相等,地址不相等
deep深拷貝:值相等,地址不相等
總結:
1,深淺拷貝都是對源對象的復制,佔用不同的內存空間。
2,不可變類型的對象,對於深淺拷貝毫無影響,最終的地址值和值都是相等的。
3,可變類型的對象,使用=淺拷貝時, 值相等,地址相等,對新對象里的值進行修改同時會影響原有對象;使用淺拷貝時值相等,地址不相等;使用deep深拷貝時值相等,地址不相等。可以看出針對可變類型淺拷貝和deep深拷貝,對新對象里的值進行修改不會影響原有對象。
『柒』 python 字元串提取信息方法總結
在日常項目中,我們經常會使用python從字元串中提取我們想要的信息,以下是各種提取信息方法的總結。
格式: str[beg:end:step]
描述: 字元串[開始索引:結束索引:步長]切取字元串為開始索引到結束索引-1內的字元串步長不指定時步長為1
舉例:
print(str[::2]) //::這里表示整個字元串,每兩個位置提取一個
print(str[1:3]) //提取第2個到第3個
print(str[2::]) //截取2 - 末尾的字元
本小節介紹了,處理字元串經常用到的一些函數方法。
語法: str.find(str, beg=0, end=len(string))
描述: Python find() 方法檢測字元串中是否包含子字元串 str ,如果指定 beg(開始) 和 end(結束) 范圍,則檢查是否包含在指定范圍內,如果包含子字元串返回開始的索引值,否則返回-1。
語法: str.split(str="", num=string.count(str)).
描述: Python split() 通過指定分隔符對字元串進行切片,如果參數 num 有指定值,則分隔 num+1 個子字元串.返回分割後的字元串列表,該方法可以講字元串轉化為列表處理。
另外的: str.splitlines([keepends])按照行(' ', ' ', ')分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。
語法: str.partition(str)
描述: partition() 方法用來根據指定的分隔符將字元串進行分割。如果字元串包含指定的分隔符,則返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。
語法: str.replace(old, new, max)
描述: Python replace() 方法把字元串中的 old(舊字元串) 替換成 new(新字元串),如果指定第三個參數max,則替換不超過 max 次。
語法: str.strip([chars]);
描述: Python strip() 方法用於移除字元串頭尾指定的字元(默認為空格或換行符)或字元序列。:該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。
語法: str.join(sequence)
描述: Python join() 方法用於將序列中的元素以指定的字元連接生成一個新的字元串。
上述方法還有其變形,如str.rfind(),這代表從字元串右邊開始處理,正常是從左邊開始處理。下表是其它常用的python字元串自帶函數方法。
正則表達式是一個特殊的字元序列,它能幫助你方便的檢查一個字元串是否與某種模式匹配。本小節主要介紹Python中常用的正則表達式處理函數和正則表達式的書寫規則。
re 模塊使 Python 語言擁有全部的正則表達式功能。所以在python中使用正則表達式處理函數需要import re
語法: re.search(pattern, string, flags=0)
描述: re.search 掃描整個字元串並返回第一個成功的匹配。匹配成功re.search方法返回一個匹配的對象,否則返回None。
語法: re.sub(pattern, repl, string, count=0, flags=0)
描述: Python 的 re 模塊提供了re.sub用於替換字元串中的匹配項。
語法: pattern.findall(string, pos, endpos)
描述: 在字元串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。
模式字元串使用特殊的語法來表示一個正則表達式:
『捌』 Python中操作字元串之replace()方法,值得學習!
replace()方法返回當前old換成new,可選擇的替代限制到最大數量的字元串的副本。
語法
以下是replace()方法的語法:
1
str.replace(old, new[, max])
參數
old -- 這是明臘要進行更換的舊子串。
new -- 這是新卜敗的子串,將取代舊的子字元串。
max -- 如果這個可選參數max值給出,僅第一計數出現被替換。
返回值
此方法返回字元串的拷貝與舊子串出現的所有被新的所取代。如果可選參型槐顫數最大值給定,只有第一個計數發生替換。
例子
下面的示例演示了replace()方法的使用。
?
1
2
3
4
5
#!/usr/bin/python
str = this is string example....wow!!! this is really string;
print str.replace(is, was);
print str.replace(is, was, 3);
當我們運行上面的程序,它會產生以下結果:
?
1
2
thwas was string example....wow!!! thwas was really string
thwas was string example....wow!!! thwas is really string