8個超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計制作的公司,為廣大用戶提供了成都網(wǎng)站設(shè)計、網(wǎng)站制作,成都網(wǎng)站設(shè)計,1元廣告,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來梳理下8個好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對一個列表進(jìn)行去重操作的時候,set()函數(shù)就派上用場了。
用于創(chuàng)建一個集合,集合里的元素是無序且不重復(fù)的。集合對象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時候就需要用到sorted() ,它可以對任何可迭代對象進(jìn)行排序,并返回列表。對列表升序操作:
對元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:
根據(jù)自定義規(guī)則,對元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時候,假如要對序列里的每個單詞進(jìn)行大寫轉(zhuǎn)化操作。這個時候就可以使用map()函數(shù)。
map()會根據(jù)提供的函數(shù),對指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會把序列里的每一個元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個例子,對列表里的每個數(shù)字作平方處理:
6、reduce()前面說到對列表里的每個數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個元素相乘,該怎么做呢?這時候用到reduce()函數(shù)。
reduce()會對參數(shù)序列中元素進(jìn)行累積。第一、第二個元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個元素進(jìn)行函數(shù)操作,以此類推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因?yàn)樗匾恕?/p>
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個元素映射到函數(shù),最終返回結(jié)果。我們再試試,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個場景,同時打印出序列里每一個元素和它對應(yīng)的順序號,我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個例子說明,對字符串進(jìn)行標(biāo)注,返回每個字母和其索引。
題主你好,
首先, plt是官網(wǎng)推薦的對matplotlib.pyplot的縮寫,即在python中通常有語句:
import matplotlib.pyplot as plt
其次, figtext()函數(shù)的作用是在圖中添加文本信息,而函數(shù)中的參數(shù),則是設(shè)置所添加文本的 位置 | 文本內(nèi)容 | 字體 | 字體大小 | 對齊 等等,詳細(xì)的參數(shù)可參照網(wǎng)址:
------------
下面我們看一下figtext()函數(shù)的定義:
可以看出, x,y,s這三個參數(shù)是你調(diào)用時必傳的, 其中:
x表示橫坐標(biāo);
y表示縱坐標(biāo);
s表示要添加的文本內(nèi)容;
*.需要注意的是,默認(rèn)情況下x,y坐標(biāo)的取值范圍都是0到1
---------
下面來看題主的問題:
plt.figtext(0.2, 1 - i * 0.02, '%.5f' % angle, ha='center', va='bottom', fontsize=7)
其中頭三個參數(shù),按照上面說的對照一下:
0.2: 表示橫坐標(biāo);
1-i*0.02: 表示縱坐標(biāo);
'%.5f' % angle: 表示要添加的文本內(nèi)容,? angle是變量名, %.5f表示將變量angle格式化為浮點(diǎn)數(shù),并保留小數(shù)點(diǎn)后5位(如果有多位,則小數(shù)點(diǎn)后5位會4舍5入),舉例來說:
a.? '%.5f'%3? 得到的結(jié)果是 3.00000;
b. '%.5f'%3.141356得到的結(jié)果是 3.14136;
后面還有三個參數(shù):
ha: 這是horizantal alignment的縮寫,說白了就是" 水平對齊方式 "
va: 這是vertical alignment的縮寫, 說白了就是" 垂直對齊方式 "
fontsize: 這個即字面意思,即" 文本字體大小 "
*.關(guān)于figtext()函數(shù), 官網(wǎng)給了兩個例子,題主可以參考一下:? 還是上面給的那個鏈接, 拉到最底下有兩個例子的超鏈接, 點(diǎn)進(jìn)去就可以看到樣例代碼及運(yùn)行效果圖:
希望可以幫到題主, 歡迎追問.
01 Re概覽
Re模塊是python的內(nèi)置模塊,提供了正則表達(dá)式在python中的所有用法,默認(rèn)安裝位置在python根目錄下的Lib文件夾(如 ..\Python\Python37\Lib)。主要提供了3大類字符串操作方法:
字符查找/匹配
字符替換
字符分割
由于是面向字符串類型的模塊,就不得不提到字符串編碼類型。re模塊中,模式串和搜索串既可以是 Unicode 字符串 (常用str類型) ,也可以是8位字節(jié)串 (bytes,2位16進(jìn)制數(shù)字,例如\xe5) , 但要求二者必須是同類型字符串。
02 字符串查找/匹配
預(yù)編譯:compile
在介紹查找和匹配函數(shù)前,首先需要知道re的compile函數(shù),該函數(shù)可以將一個模式串編譯成正則表達(dá)式類型,以便后續(xù)快速匹配和復(fù)用
import?re pattern?=?re.compile(r'[a-z]{2,5}') type(pattern)?#re.Pattern
此例創(chuàng)建了一個正則表達(dá)式式對象 (re.pattern) ,命名為pattern,用于匹配2-5位小寫字母的模式串。后續(xù)在使用其他正則表達(dá)式函數(shù)時,即可使用pattern進(jìn)行方法調(diào)用。
匹配:match
match函數(shù)用于從文本串的起始位置開始匹配,若匹配成功,則返回相應(yīng)的匹配對象,此時可調(diào)用group()方法返回匹配結(jié)果,也可用span()方法返回匹配起止下標(biāo)區(qū)間;否則返回None
import?re pattern?=?re.compile(r'[a-z]{2,5}') text1?=?'this?is?a?re?test' res?=?pattern.match(text1) print(res)?# if?res: ?print(res.group())?#this ?print(res.span())?#(0,?4) text2?=?'是的,?this?is?a?re?test' print(pattern.match(text2))#None
match函數(shù)還有一個變形函數(shù)fullmatch,當(dāng)且僅當(dāng)模式串與文本串剛好全部匹配時,返回一個匹配對象,否則返回None
搜索:search
match只提供了從文本串起始位置匹配的結(jié)果,如果想從任意位置匹配,則可調(diào)用search方法,與match方法類似,當(dāng)任意位置匹配成功,則立即返回一個匹配對象,也可調(diào)用span()方法獲取起止區(qū)間、調(diào)用group方法獲得匹配文本串
import?re pattern?=?re.compile(r'\s[a-z]{2}') text1?=?'this?is?a?re?test' res?=?pattern.search(text1) print(res)?# if?res: ?print(res.group())?#is ?print(res.span())?#(4,?7) pattern2?=?re.compile(r'\s[a-z]{5}') text2?=?'是的,this?is?a?re?test' print(pattern2.search(text2))#None
match和search均用于匹配單個結(jié)果,唯一區(qū)別在于前者是從起始位置開始匹配,而后者從任意位置匹配,匹配成功則返回一個match對象。
全搜索:findall/finditer
幾乎是最常用的正則表達(dá)式函數(shù),用于尋找所有匹配的結(jié)果,例如在爬蟲信息提取中,可非常方便地提取所有匹配字段
import?re pattern?=?re.compile(r'\s[a-z]{2,5}') text1?=?'this?is?a?re?test' res?=?pattern.findall(text1) print(res)?#['?is',?'?re',?'?test']
findall返回的是一個列表對象類型,當(dāng)無匹配對象時,返回一個空列表。為了避免因同時返回大量匹配結(jié)果占用過多內(nèi)存,可以調(diào)用finditer函數(shù)返回一個迭代器類型,其中每個迭代元素是一個match對象,可繼續(xù)調(diào)用group和span方法獲取相應(yīng)結(jié)果
import?re pattern?=?re.compile(r'\s[a-z]{2,5}') text1?=?'this?is?a?re?test' res?=?pattern.finditer(text1) for?r?in?res: ?print(r.group()) """ ?is ?re ?test """
當(dāng)匹配模式串較為簡單或者僅需單詞調(diào)用時,上述所有方法也可直接調(diào)用re類函數(shù),而無需事先編譯。此時各方法的第一個參數(shù)為模式串。
import?re pattern?=?re.compile(r'\d{2,5}') text?=?'this?is?re?test' re.findall('[a-z]+',?text)?#['this',?'is',?'re',?'test'] 03 字符串替換/分割
替換:sub/subn
當(dāng)需要對文本串進(jìn)行條件替換時,可調(diào)用re.sub實(shí)現(xiàn) (當(dāng)然也可先編譯后再用調(diào)用實(shí)例方法) ,相應(yīng)參數(shù)分別為模式串、替換格式、文本串,還可以通過增加缺省參數(shù)限定替換次數(shù)和匹配模式。通過在模式串進(jìn)行分組,可實(shí)現(xiàn)字符串的格式化替換(類似字符串的format方法),以實(shí)現(xiàn)特定任務(wù)。
import?re text?=?'today?is?2020-03-05' print(re.sub('-',?'',?text))?#'today?is?20200305' print(re.sub('-',?'',?text,?1))?#'today?is?202003-05' print(re.sub('(\d{4})-(\d{2})-(\d{2})',?r'\2/\3/\1',?text))?#'today?is?03/05/2020'
re.sub的一個變形方法是re.subn,區(qū)別是返回一個2元素的元組,其中第一個元素為替換結(jié)果,第二個為替換次數(shù)
import?re text?=?'today?is?2020-03-05' print(re.subn('-',?'',?text))?#('today?is?20200305',?2)
分割:split
還可以調(diào)用正則表達(dá)式實(shí)現(xiàn)字符串的特定分割,相當(dāng)于.split()方法的一個加強(qiáng)版,實(shí)現(xiàn)特定模式的分割,返回一個切割后的結(jié)果列表
import?re text?=?'today?is?a?re?test,?what?do?you?mind?' print(re.split(',',?text))?#['today?is?a?re?test',?'?what?do?you?mind?'] 04 總結(jié)
python中的re模塊提供了正則表達(dá)式的常用方法,每種方法都包括類方法調(diào)用(如re.match)或模式串的實(shí)例調(diào)用(pattern.match)2種形式
常用的匹配函數(shù):match/fullmatch
常用的搜索函數(shù):search/findall/finditer
常用的替換函數(shù):sub/subn
常用的切割函數(shù):split
還有其他很多方法,但不是很常用,具體可參考官方文檔
另外,python還有第三方正則表達(dá)式庫regex可供選擇
到此這篇關(guān)于一文秒懂python正則表達(dá)式常用函數(shù)的文章就介紹到這了,希望大家以后多多支持!
在 pandas 中,存儲文本主要有兩種方式
但一般建議使用 StringDtype 類型存儲文本數(shù)據(jù)。都是由于各種原因,現(xiàn)在字符串?dāng)?shù)據(jù)的默認(rèn)存儲類型還是 object 。
要存儲為 string 類型,需要顯式的設(shè)置 dtype 參數(shù)
或者在創(chuàng)建 Series 或 DataFrame 之后,使用 astype 轉(zhuǎn)換類型
也可以使用 StringDtype/"string" 轉(zhuǎn)換其他非字符串類型的數(shù)據(jù)
轉(zhuǎn)換現(xiàn)有數(shù)據(jù)的類型
StringDtype 類型對象與 object 類型之間存在一些差異
兩個結(jié)果的輸出都是 Int64 類型。將其與 object 類型比較
當(dāng)存在 NA 值時,輸出為 float64 。類似地,對于返回布爾值的方法
Series 和 Index 有一套字符串處理方法,可以方便地對數(shù)組的每個元素進(jìn)行操作,最重要的是,這些方法會自動忽略缺失值。
這些方法可以通過 str 屬性訪問,通常具有與內(nèi)置字符串方法相匹配的名稱
Index 上的字符串方法對于清理或轉(zhuǎn)換 DataFrame 的列特別有用。
例如,您可能有帶有前導(dǎo)或后置空格的列
因?yàn)? df.columns 是一個 Index 對象,所以我們可以使用 .str 訪問器
我們可以根據(jù)需要對列名進(jìn)行處理,然后重新設(shè)置列名。
例如,我們刪除列名的前后空格,并將其改為小寫字母,同時用 _ 替換剩余的空格
split 方法會返回一個值為 list 的 Series
可以使用 get 或 [] 訪問拆分后的列表中的元素
更簡單的方法是設(shè)置 expand 參數(shù),返回一個 DataFrame
當(dāng)原來的 Series 包含 StringDtype 類型的數(shù)據(jù)時,輸出列也將全部為 StringDtype
當(dāng)然,也可以設(shè)置切割次數(shù)
它還有個對應(yīng)的 rsplit 方法,從右邊起始對字符串進(jìn)行拆分
replace 參數(shù)支持使用正則表達(dá)式,前兩個參數(shù)是 pat (匹配模式) 和 repl (替換字符串)
如果只是想要替換字符串字面值,可以將 regex 參數(shù)設(shè)置為 False ,而不需要對每個特殊字符進(jìn)行轉(zhuǎn)義。此時 pat 和 repl 參數(shù)必須是字符串
此外, replace 方法還接受一個可調(diào)用的替換函數(shù),會使用 re.sub() 方法在每個匹配的模式上調(diào)用該函數(shù)
該函數(shù)需要傳入一個正則對象作為位置參數(shù),并返回一個字符串。例如
replace 方法的 pat 參數(shù)還接受 re.compile() 編譯的正則表達(dá)式對象。所有的 flags 需要在編譯正則對象時設(shè)置
如果在 replace 中設(shè)置 flags 參數(shù),則會拋出異常
有幾種方法可以將一個 Series 或 Index 與自己或其他的 Series 或 Index 相連接,所有這些方法都是基于 cat() 方法
可以連接一個 Series 或 Index 的內(nèi)容
如果未指定 sep 參數(shù),則默認(rèn)為空字符串
默認(rèn)會跳過缺失值,也可以使用 na_rep 指定缺失值的表示方式
cat() 的第一個參數(shù) others 可以是類似列表的對象,但是其長度需要和調(diào)用對象一致
只要兩個對象中存在缺失值,對應(yīng)的結(jié)果中也是缺失值,除非指定了 na_rep
others 參數(shù)也可以是二維的,但是得保證其行數(shù)必須與調(diào)用的對象一致
對于 Series 或 DataFrame 的連接,可以通過設(shè)置 join 參數(shù)指定對齊方式
通常 join 可選范圍為: 'left' , 'outer' , 'inner' , 'right' 。此時,不再要求兩個對象長度一致
當(dāng) others 參數(shù)是 DataFrame 時,也可以使用
可以將一些類似數(shù)組的對象(如 Series , Index 等)放在一個類似列表的容器中,然后傳遞給 cat
對于沒有索引的對象,其長度必須與調(diào)用 cat 的對象相同。但是 Series 和 Index 可以是任意的,除非設(shè)置了 json=None 。
如果在 others 參數(shù)上包含不同索引的對象,且設(shè)置了 join='right' ,則最后的結(jié)果將會是這些索引的并集
分享題目:python全選文本函數(shù) python全文替換
網(wǎng)頁URL:http://jinyejixie.com/article20/dopceco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、App設(shè)計、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作、云服務(wù)器、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)