溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中itertools庫(kù)的四個(gè)函數(shù)是什么及怎么用

發(fā)布時(shí)間:2022-04-06 13:38:42 來(lái)源:億速云 閱讀:140 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了Python中itertools庫(kù)的四個(gè)函數(shù)是什么及怎么用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python中itertools庫(kù)的四個(gè)函數(shù)是什么及怎么用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

1. 引言

在Python開(kāi)發(fā)中,itertools庫(kù)經(jīng)常被忽視,實(shí)際上該庫(kù)中抱恨了一些非常棒的函數(shù),特別是用于處于數(shù)據(jù)流的函數(shù)。

2. accumulate() 函數(shù)

第三方庫(kù)itertools提供的函數(shù)accumulate(),可以幫助我們對(duì)數(shù)據(jù)流執(zhí)行累積操作。換句話說(shuō),假設(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)不直觀,那我們來(lái)舉個(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ù)我們的喜好來(lái)過(guò)濾內(nèi)容。與函數(shù)filter()函數(shù)不同,函數(shù)compress()需要傳入相應(yīng)的標(biāo)志位來(lái)決定是否應(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)行分組。

例如,我們想按國(guó)家對(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庫(kù)中最令人驚嘆的函數(shù)之一,它提供了排列組合運(yùn)算符!
我們唯一需要做的就是將正確的關(guān)鍵字與輸出元組的長(zhǎng)度一起傳遞給相應(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)]

關(guān)于“Python中itertools庫(kù)的四個(gè)函數(shù)是什么及怎么用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Python中itertools庫(kù)的四個(gè)函數(shù)是什么及怎么用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI