Python中itertools庫的四個(gè)函數(shù)介紹_第1頁
Python中itertools庫的四個(gè)函數(shù)介紹_第2頁
Python中itertools庫的四個(gè)函數(shù)介紹_第3頁
Python中itertools庫的四個(gè)函數(shù)介紹_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Python中itertools庫的四個(gè)函數(shù)介紹目錄1.引言2.accumulate()函數(shù)3.compress()函數(shù)4.groupby()函數(shù)5.排列組合操作6總結(jié)

1.引言

在Python開發(fā)中,??itertools??庫經(jīng)常被忽視,實(shí)際上該庫中抱恨了一些非常棒的函數(shù),特別是用于處于數(shù)據(jù)流的函數(shù)。在本文中,我們將討論該庫中的十分使用的幾個(gè)函數(shù),并重點(diǎn)介紹什么時(shí)候我們應(yīng)該考慮使用它們。

閑話少說,我們直接開始吧!

2.accumulate()函數(shù)

第三方庫??itertools??提供的函數(shù)??accumulate()??,可以幫助我們對數(shù)據(jù)流執(zhí)行累積操作。換句話說,假設(shè)我們有一個(gè)數(shù)據(jù)列表[a,b,c,d,e]和一個(gè)運(yùn)算f,那么函數(shù)??accumulate()??可以幫助我們計(jì)算??f(a,b)??,??f(f(a,b),c)??,??f(f(f(a,b),c),d)??,等等。

文字有點(diǎn)不直觀,那我們來舉個(gè)累加的栗子吧!

樣例代碼如下:

importitertools

data=[3,4,6,2,1,9,0,7,5,8]

res=itertools.accumulate(data,lambdax,y:x+y)

print(list(res))

#[3,7,13,15,16,25,25,32,37,45]

上述函數(shù)??accumulate()??的作用是:先把3和4相加,然后得到7,再和6相加,得到另一個(gè)值,依此類推。

需要注意的是:如果要執(zhí)行給定3個(gè)或更多值的累計(jì)操作,則不允許使用該函數(shù),因?yàn)閍ccumulate()只接受迭代器,迭代器每次調(diào)用next()返回至多1個(gè)元素。

3.compress()函數(shù)

函數(shù)??compress()??可以根據(jù)我們的喜好來過濾內(nèi)容。與函數(shù)??filter()??函數(shù)不同,函數(shù)??compress()??需要傳入相應(yīng)的標(biāo)志位來決定是否應(yīng)該保留每個(gè)值。

舉個(gè)例子會更加直觀,相關(guān)樣例代碼如下:

importitertools

data=[3,4,6,2,1,9,0,7,5,8]

selector=[1,0,0,0,1,1,0,1,1,0]

res=press(data,selector)

print(list(res))

#[3,1,9,7,5]

在上面的示例中,如果數(shù)據(jù)是奇數(shù),則選擇器將為1,否則為0。因此,函數(shù)??compress()??操作的結(jié)果將只是保留原始數(shù)據(jù)中的奇數(shù)。

4.groupby()函數(shù)

在許多情況下,我們會在Python中以隨機(jī)順序獲得一個(gè)元組列表,假如我們希望按值對它們進(jìn)行分組。此時(shí)是函數(shù)??groupby()??發(fā)揮作用的完美場景!

函數(shù)??groupby()??將接受一個(gè)可迭代的參數(shù)和一個(gè)返回值的函數(shù),然后它將按函數(shù)返回的值對元組列表進(jìn)行分組。

例如,我們想按國家對以下城市進(jìn)行分組:

importitertools

data=[('NewYork','US'),("Shanghai","China"),

("LA",'US'),("Chongqing","China")]

forcity,groupinitertools.groupby(sorted(data,key=lambdax:x[1]),lambdax:x[1]):

foriingroup:

print("%sisin%s."%(i[0],city))

print("")

#ShanghaiisinChina.

#ChongqingisinChina.

#NewYorkisinUS.

#LAisinUS.

5.排列組合操作

排列組合可能是??itertools??庫中最令人驚嘆的函數(shù)之一,它提供了排列組合運(yùn)算符!

我們唯一需要做的就是將正確的關(guān)鍵字與輸出元組的長度一起傳遞給相應(yīng)的函數(shù),

如下例所示:

importitertools

data=[3,4,6]

com_res=binations(data,2)

print(list(com_res))

#[(3,4),(3,6),(4,6)]

com_res=itertools.permutations(data,2)

print(list(com_res))

#[(3,4),(3,6),(4,3),(4,6),(6,3),(6,4)]

com_without_replacement_res=binations_with_replacement(data,2)

print(list(com_without_replacement_res))

#[(3,3),(3,4),(3,6),(4,4),(4,6),(6,6)]

product_res=duct(data,data)

print(list(product_res))

#[(3,3),(3,4),(3,6),(4,3),(4,4),(4,6),(6,3),(6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論