Python中itertools庫的四個(gè)函數(shù)介紹
1. 引言
在Python開發(fā)中,??itertools?
?庫經(jīng)常被忽視,實(shí)際上該庫中抱恨了一些非常棒的函數(shù),特別是用于處于數(shù)據(jù)流的函數(shù)。在本文中,我們將討論該庫中的十分使用的幾個(gè)函數(shù),并重點(diǎn)介紹什么時(shí)候我們應(yīng)該考慮使用它們。
閑話少說,我們直接開始吧!
2. accumulate() 函數(shù)
第三方庫??itertools?
?提供的函數(shù)??accumulate()?
?,可以幫助我們對(duì)數(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è)累加的栗子吧!
樣例代碼如下:
import itertools data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8] res = itertools.accumulate(data, lambda x,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è)例子會(huì)更加直觀,相關(guān)樣例代碼如下:
import itertools data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8] selector = [1, 0, 0, 0, 1, 1, 0, 1, 1, 0] res = itertools.compress(data, selector) print(list(res)) # [3, 1, 9, 7, 5]
在上面的示例中,如果數(shù)據(jù)是奇數(shù),則選擇器將為 1,否則為 0。因此,函數(shù)??compress()?
? 操作的結(jié)果將只是保留原始數(shù)據(jù)中的奇數(shù)。
4. groupby() 函數(shù)
在許多情況下,我們會(huì)在 Python 中以隨機(jī)順序獲得一個(gè)元組列表,假如我們希望按值對(duì)它們進(jìn)行分組。此時(shí)是函數(shù)?? groupby()?
? 發(fā)揮作用的完美場(chǎng)景!
函數(shù)?? groupby()?
? 將接受一個(gè)可迭代的參數(shù)和一個(gè)返回值的函數(shù),然后它將按函數(shù)返回的值對(duì)元組列表進(jìn)行分組。
例如,我們想按國家對(duì)以下城市進(jìn)行分組:
import itertools data = [('New York', 'US'), ("Shanghai", "China"), ("LA", 'US'),("Chongqing", "China")] for city, group in itertools.groupby(sorted(data, key=lambda x: x[1]), lambda x: x[1]): for i in group: print("%s is in %s." % (i[0], city)) print("") # Shanghai is in China. # Chongqing is in China. # New York is in US. # LA is in US.
5. 排列組合操作
排列組合可能是 ??itertools?
?庫中最令人驚嘆的函數(shù)之一,它提供了排列組合運(yùn)算符!
我們唯一需要做的就是將正確的關(guān)鍵字與輸出元組的長度一起傳遞給相應(yīng)的函數(shù),
如下例所示:
import itertools data = [3, 4, 6] com_res = itertools.combinations(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 = itertools.combinations_with_replacement(data, 2) print(list(com_without_replacement_res)) # [(3, 3), (3, 4), (3, 6), (4, 4), (4, 6), (6, 6)] product_res = itertools.product(data, data) print(list(product_res)) # [(3, 3), (3, 4), (3, 6), (4, 3), (4, 4), (4, 6), (6, 3), (6, 4), (6, 6)]
6 總結(jié)
庫??itertools?
?對(duì)大多數(shù)人來說,是一個(gè)未被充分利用甚至很少聽到的庫,但它確實(shí)包含一些非常好用的函數(shù)。這些函數(shù)通常可以幫助我們將代碼行數(shù)減少到僅一行,使我們的代碼看起來更加簡潔優(yōu)雅!
到此這篇關(guān)于Python中itertools庫的四個(gè)函數(shù)介紹的文章就介紹到這了,更多相關(guān)Python中itertools庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中itertools簡介使用介紹
- python迭代器模塊itertools常用的方法
- Python中itertools模塊的使用教程詳解
- 淺析Python自帶性能強(qiáng)悍的標(biāo)準(zhǔn)庫itertools
- python中itertools模塊使用小結(jié)
- 關(guān)于Python 內(nèi)置庫 itertools
- Python函數(shù)式編程中itertools模塊詳解
- Python編程itertools模塊處理可迭代集合相關(guān)函數(shù)
- 關(guān)于Python中 循環(huán)器 itertools的介紹
- 詳解python itertools功能
- python排列組合庫itertools的具體使用
相關(guān)文章
python3翻轉(zhuǎn)字符串里的單詞點(diǎn)的實(shí)現(xiàn)方法
這篇文章主要介紹了python3翻轉(zhuǎn)字符串里的單詞點(diǎn)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python 3.5下xadmin的使用及修復(fù)源碼bug
xadmin是基于Python和Django的管理框架,想要能夠熟練使用,學(xué)習(xí)Django是必須的。下面這篇文章主要給大家介紹了python 3.5下xadmin的使用和當(dāng)我們重寫了Django的User表后,Django就會(huì)出現(xiàn)bug問題的解決方法,需要的朋友可以參考下。2017-05-05Python連接MySQL并使用fetchall()方法過濾特殊字符
這篇文章主要介紹了Python連接MySQL的方法并講解了如何使用fetchall()方法過濾特殊字符,示例環(huán)境為Ubuntu操作系統(tǒng),需要的朋友可以參考下2016-03-03Python?PySpark案例實(shí)戰(zhàn)教程
PySpark是由Spark官方開發(fā)的Python語言第三方庫,Python開發(fā)者可以使用pip程序快速的安裝PySpark并像其它三方庫那樣直接使用,本文給大家介紹Python?PySpark案例實(shí)戰(zhàn),感興趣的朋友一起看看吧2023-09-09python光學(xué)仿真學(xué)習(xí)wxpython創(chuàng)建手速測(cè)試程序
這篇文章主要介紹了python光學(xué)仿真學(xué)習(xí)使用wxpython創(chuàng)建一個(gè)手速測(cè)試程序示例的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10