8個(gè)超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供保康網(wǎng)站建設(shè)、保康做網(wǎng)站、保康網(wǎng)站設(shè)計(jì)、保康網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、保康企業(yè)網(wǎng)站模板建站服務(wù),10年??底鼍W(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來(lái)梳理下8個(gè)好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對(duì)一個(gè)列表進(jìn)行去重操作的時(shí)候,set()函數(shù)就派上用場(chǎng)了。
用于創(chuàng)建一個(gè)集合,集合里的元素是無(wú)序且不重復(fù)的。集合對(duì)象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問(wèn)如何用python寫(xiě)一個(gè)四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來(lái)做就很簡(jiǎn)單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過(guò)程中,我們經(jīng)常會(huì)用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted() ,它可以對(duì)任何可迭代對(duì)象進(jìn)行排序,并返回列表。對(duì)列表升序操作:
對(duì)元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長(zhǎng)度來(lái)排序:
根據(jù)自定義規(guī)則,對(duì)元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對(duì)序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個(gè)序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時(shí)候,假如要對(duì)序列里的每個(gè)單詞進(jìn)行大寫(xiě)轉(zhuǎn)化操作。這個(gè)時(shí)候就可以使用map()函數(shù)。
map()會(huì)根據(jù)提供的函數(shù),對(duì)指定的序列做映射,最終返回迭代器。也就是說(shuō)map()函數(shù)會(huì)把序列里的每一個(gè)元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個(gè)例子,對(duì)列表里的每個(gè)數(shù)字作平方處理:
6、reduce()前面說(shuō)到對(duì)列表里的每個(gè)數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個(gè)元素相乘,該怎么做呢?這時(shí)候用到reduce()函數(shù)。
reduce()會(huì)對(duì)參數(shù)序列中元素進(jìn)行累積。第一、第二個(gè)元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個(gè)元素進(jìn)行函數(shù)操作,以此類(lèi)推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個(gè)例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來(lái)講,是因?yàn)樗匾恕?/p>
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象。filter()函數(shù)和map()、reduce()函數(shù)類(lèi)似,都是將序列里的每個(gè)元素映射到函數(shù),最終返回結(jié)果。我們?cè)僭囋?,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個(gè)場(chǎng)景,同時(shí)打印出序列里每一個(gè)元素和它對(duì)應(yīng)的順序號(hào),我們用enumerate()函數(shù)做做看。
enumerate翻譯過(guò)來(lái)是枚舉、列舉的意思,所以說(shuō)enumerate()函數(shù)用于對(duì)序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個(gè)例子說(shuō)明,對(duì)字符串進(jìn)行標(biāo)注,返回每個(gè)字母和其索引。
Pos()功能在一個(gè)字符串中查找所包含的另一個(gè)字符串的起始位置。語(yǔ)法Pos ( string1, string2 {, start } )
參數(shù)string1:string類(lèi)型,指定要從中查找子串string2的字符串string2:string類(lèi)型,指定要在string1中查找的字符串start:long類(lèi)型,可選項(xiàng),指定從string1的第幾個(gè)字符開(kāi)始查找。缺省值為1返回值Long。函數(shù)執(zhí)行成功時(shí)返回在start位置后string2在string1中第一次出現(xiàn)的起始位置。如果在string1中按指定要求未找到string2、或start的值超過(guò)了string1的長(zhǎng)度,那么Pos()函數(shù)返回0。如果任何參數(shù)的值為NULL,Pos()函數(shù)返回NULL。用法Pos()函數(shù)在字符串查找時(shí)區(qū)分大小寫(xiě),因此,"aa"不匹配"AA"。
拓展資料:
公式的運(yùn)用
一、數(shù)字處理
1、取絕對(duì)值函數(shù)
公式:=ABS(數(shù)字)
2、取整函數(shù)
公式:=INT(數(shù)字)
3、四舍五入函數(shù)
公式:=ROUND(數(shù)字,小數(shù)位數(shù))
二、判斷公式
1、如果計(jì)算的結(jié)果值錯(cuò)誤那么顯示為空
公式:=IFERROR(數(shù)字/數(shù)字,)
說(shuō)明:如果計(jì)算的結(jié)果錯(cuò)誤則顯示為空,否則正常顯示。
2、IF語(yǔ)句的多條件判定及返回值
公式:IF(AND(單元格(邏輯運(yùn)算符)數(shù)值,指定單元格=返回值1),返回值2,)
說(shuō)明:所有條件同時(shí)成立時(shí)用AND,任一個(gè)成立用OR函數(shù)。
三、常用的統(tǒng)計(jì)公式
1、統(tǒng)計(jì)在兩個(gè)表格中相同的內(nèi)容
公式:B2=COUNTIF(數(shù)據(jù)源:位置,指定的,目標(biāo)位置)
說(shuō)明:如果返回值大于0說(shuō)明在另一個(gè)表中存在,0則不存在。
如果,在此示例中所用到的公式為:B2=COUNTIF(Sheet15!A:A,A2)
2、統(tǒng)計(jì)不重復(fù)的總數(shù)據(jù)
公式:C2=SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8))
說(shuō)明:用COUNTIF函數(shù)統(tǒng)計(jì)出源數(shù)據(jù)中每人的出現(xiàn)次數(shù),并用1除的方式把變成分?jǐn)?shù),最后再相加。
四、數(shù)據(jù)求和公式
1、隔列求和的應(yīng)用
公式:H3=SUMIF($A$2:$G$2,H$2,A3:G3)或=SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3)
說(shuō)明:如果在標(biāo)題行中沒(méi)有規(guī)則就可以用第2個(gè)公式
2、單條件應(yīng)用之求和
公式:F2=SUMIF(A:A,C:C)
說(shuō)明:這是SUMIF函數(shù)的最基礎(chǔ)的用法
五、查找與引用公式
1、單條件查找
說(shuō)明:VLOOKUP是excel中最常用的查找方式
六、字符串處理公式
1、多單元格字符串的合并
說(shuō)明:Phonetic函數(shù)只能合并字符型數(shù)據(jù),不能合并數(shù)值。
2、截取結(jié)果3位之外的部分
說(shuō)明:LEN計(jì)算總長(zhǎng)度,LEFT從左邊截總長(zhǎng)度-3個(gè)。
正則表達(dá)式是一個(gè)特殊的字符序列,用于簡(jiǎn)潔表達(dá)一組字符串特征,檢查一個(gè)字符串是否與某種模式匹配,使用起來(lái)十分方便。
在Python中,我們通過(guò)調(diào)用re庫(kù)來(lái)使用re模塊:
import re
下面介紹Python常用的正則表達(dá)式處理函數(shù)。
re.match函數(shù)
re.match 函數(shù)從字符串的起始位置匹配正則表達(dá)式,返回match對(duì)象,如果不是起始位置匹配成功的話(huà),match()就返回None。
re.match(pattern, string, flags=0)
pattern:匹配的正則表達(dá)式。
string:待匹配的字符串。
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。具體參數(shù)為:
re.I:忽略大小寫(xiě)。
re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴(lài)于當(dāng)前環(huán)境。
re.M:多行模式。
re.S:即 . ,并且包括換行符在內(nèi)的任意字符(. 不包括換行符)。
re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴(lài)于 Unicode 字符屬性數(shù)據(jù)庫(kù)。
re.X:為了增加可讀性,忽略空格和 # 后面的注釋。
import?re #從起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.match('def','abcdefghi') print(r2)
運(yùn)行結(jié)果:
其中,span表示匹配成功的整個(gè)子串的索引。
使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。
group(num):匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),這時(shí)它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。
groups():返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。
import?re s='This?is?a?demo' r1=re.match(r'(.*)?is?(.*)',s) r2=re.match(r'(.*)?is?(.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())
運(yùn)行結(jié)果:
上述代碼中的(.*)和(.*?)表示正則表達(dá)式的貪婪匹配與非貪婪匹配。
re.search函數(shù)
re.search函數(shù)掃描整個(gè)字符串并返回第一個(gè)成功的匹配,如果匹配成功則返回match對(duì)象,否則返回None。
re.search(pattern, string, flags=0)
pattern:匹配的正則表達(dá)式。
string:待匹配的字符串。
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。
import?re #從起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.search('def','abcdefghi') print(r2)
運(yùn)行結(jié)果:
使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。
group(num=0):匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),這時(shí)它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。
groups():返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。
import?re s='This?is?a?demo' r1=re.search(r'(.*)?is?(.*)',s) r2=re.search(r'(.*)?is?(.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())
運(yùn)行結(jié)果:
從上面不難發(fā)現(xiàn)re.match與re.search的區(qū)別:re.match只匹配字符串的起始位置,只要起始位置不符合正則表達(dá)式就匹配失敗,而re.search是匹配整個(gè)字符串,直到找到一個(gè)匹配為止。
re.compile 函數(shù)
compile 函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式對(duì)象,供 match() 和 search() 這兩個(gè)函數(shù)使用。
re.compile(pattern[, flags])
pattern:一個(gè)字符串形式的正則表達(dá)式。
flags:可選,表示匹配模式,比如忽略大小寫(xiě),多行模式等。
import?re #匹配數(shù)字 r=re.compile(r'\d+')? r1=r.match('This?is?a?demo') r2=r.match('This?is?111?and?That?is?222',0,27) r3=r.match('This?is?111?and?That?is?222',8,27) ? print(r1) print(r2) print(r3)
運(yùn)行結(jié)果:
findall函數(shù)
搜索字符串,以列表形式返回正則表達(dá)式匹配的所有子串,如果沒(méi)有找到匹配的,則返回空列表。
需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。
findall(string[, pos[, endpos]])
string:待匹配的字符串。
pos:可選參數(shù),指定字符串的起始位置,默認(rèn)為0。
endpos:可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度。
import?re #匹配數(shù)字 r=re.compile(r'\d+')? r1=r.findall('This?is?a?demo') r2=r.findall('This?is?111?and?That?is?222',0,11) r3=r.findall('This?is?111?and?That?is?222',0,27) ? print(r1) print(r2) print(r3)
運(yùn)行結(jié)果:
re.finditer函數(shù)
和 findall 類(lèi)似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個(gè)迭代器返回。
re.finditer(pattern, string, flags=0)
pattern:匹配的正則表達(dá)式。
string:待匹配的字符串。
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如是否區(qū)分大小寫(xiě),多行匹配等。
import?re? r=re.finditer(r'\d+','This?is?111?and?That?is?222') for?i?in?r:? ?print?(i.group())
運(yùn)行結(jié)果:
re.split函數(shù)
將一個(gè)字符串按照正則表達(dá)式匹配的子串進(jìn)行分割后,以列表形式返回。
re.split(pattern, string[, maxsplit=0, flags=0])
pattern:匹配的正則表達(dá)式。
string:待匹配的字符串。
maxsplit:分割次數(shù),maxsplit=1分割一次,默認(rèn)為0,不限次數(shù)。
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等。
import?re? r1=re.split('\W+','This?is?111?and?That?is?222')? r2=re.split('\W+','This?is?111?and?That?is?222',maxsplit=1)? r3=re.split('\d+','This?is?111?and?That?is?222')? r4=re.split('\d+','This?is?111?and?That?is?222',maxsplit=1)? print(r1) print(r2) print(r3) print(r4)
運(yùn)行結(jié)果:
re.sub函數(shù)
re.sub函數(shù)用于替換字符串中的匹配項(xiàng)。
re.sub(pattern, repl, string, count=0, flags=0)
pattern:正則中的模式字符串。
repl:替換的字符串,也可為一個(gè)函數(shù)。
string:要被查找替換的原始字符串。
count:模式匹配后替換的最大次數(shù),默認(rèn)0表示替換所有的匹配。
import?re? r='This?is?111?and?That?is?222' #?刪除字符串中的數(shù)字 r1=re.sub(r'\d+','',r) print(r1) #?刪除非數(shù)字的字符串? r2=re.sub(r'\D','',r) print(r2)
運(yùn)行結(jié)果:
到此這篇關(guān)于Python常用的正則表達(dá)式處理函數(shù)詳解的文章就介紹到這了,希望大家以后多多支持!