<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Python開發中,itertools
庫經常被忽視,實際上該庫中抱恨了一些非常棒的函數,特別是用於處於資料流的函數。在本文中,我們將討論該庫中的十分使用的幾個函數,並重點介紹什麼時候我們應該考慮使用它們。
閒話少說,我們直接開始吧!
第三方庫itertools
提供的函數accumulate()
,可以幫助我們對資料流執行累積操作。換句話說,假設我們有一個資料列表[a,b,c,d,e]和一個運算f,那麼函數accumulate()
可以幫助我們計算f(a,b)
,f(f(a,b),c)
,f(f(f(a,b),c),d)
,等等。
文字有點不直觀,那我們來舉個累加的栗子吧!
樣例程式碼如下:
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]
上述函數accumulate()
的作用是:先把3和4相加,然後得到7,再和6相加,得到另一個值,依此類推。
需要注意的是:如果要執行給定3個或更多值的累計操作,則不允許使用該函數,因為accumulate()只接受迭代器,迭代器每次呼叫next()返回至多1個元素。
函數compress()
可以根據我們的喜好來過濾內容。與函數filter()
函數不同,函數compress()
需要傳入相應的標誌位來決定是否應該保留每個值。
舉個例子會更加直觀,相關樣例程式碼如下:
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]
在上面的範例中,如果資料是奇數,則選擇器將為 1,否則為 0。因此,函數compress()
操作的結果將只是保留原始資料中的奇數。
在許多情況下,我們會在 Python 中以隨機順序獲得一個元組列表,假如我們希望按值對它們進行分組。此時是函數 groupby()
發揮作用的完美場景!
函數 groupby()
將接受一個可迭代的引數和一個返回值的函數,然後它將按函數返回的值對元組列表進行分組。
例如,我們想按國家對以下城市進行分組:
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.
排列組合可能是 itertools
庫中最令人驚歎的函數之一,它提供了排列組合運運算元!
我們唯一需要做的就是將正確的關鍵字與輸出元組的長度一起傳遞給相應的函數,
如下例所示:
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)]
庫itertools
對大多數人來說,是一個未被充分利用甚至很少聽到的庫,但它確實包含一些非常好用的函數。這些函數通常可以幫助我們將程式碼行數減少到僅一行,使我們的程式碼看起來更加簡潔優雅!
到此這篇關於Python中itertools庫的四個函數介紹的文章就介紹到這了,更多相關Python中itertools庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45