摘要:相信大家在學(xué)習(xí)的過(guò)程中都用到過(guò)這個(gè)模塊,但是可能只是用到了其中的一兩個(gè)方法,對(duì)于其更強(qiáng)大的功能沒(méi)有更深的認(rèn)識(shí)。今天我就按照自己的方式向大家介紹一下這個(gè)模塊。
相信大家在學(xué)習(xí)python的過(guò)程中都用到過(guò)這個(gè)模塊,但是可能只是用到了其中的一兩個(gè)方法,對(duì)于其更強(qiáng)大的功能沒(méi)有更深的認(rèn)識(shí)。今天我就按照自己的方式向大家介紹一下這個(gè)模塊。
groupby:用于分組
rows=[ {"name":"jim","date":"07/01"}, {"name":"tom","date":"07/01"}, {"name":"rose","date":"07/01"}, {"name":"tom","date":"07/02"}, {"name":"jim","date":"07/03"}, {"name":"rose","date":"07/02"}, ] #groupby只能對(duì)連續(xù)數(shù)據(jù)進(jìn)行分組,因此不能確定數(shù)據(jù)有序的情況下,建議進(jìn)行排序操作 gbrows=sorted(rows,key=itemgetter["date"]) for gbdata,row in gbrows(gbrows,key=itemgetter["date"]) print(gbdata) for i in row: print(i) #以下是輸出結(jié)果: 07/01/2018 {"name": "jim", "date": "07/01/2018"} {"name": "tom", "date": "07/01/2018"} {"name": "rose", "date": "07/01/2018"} 07/02/2018 {"name": "tom", "date": "07/02/2018"} {"name": "rose", "date": "07/02/2018"} 07/03/2018 {"name": "jim", "date": "07/03/2018"}
permutations:按照給定位數(shù)對(duì)可迭代對(duì)象內(nèi)元素進(jìn)行組合
listed = ["a","b","c","d"] for i in permutations(listed,3): print(i) #以下是輸出結(jié)果(由于結(jié)果比較多,我對(duì)格式進(jìn)行了變化,但數(shù)據(jù)都是正確的) ("a", "b", "c") ("a", "b", "d") ("a", "c", "b") ("a", "c", "d") ("a", "d", "b") ("a", "d", "c") ("b", "a", "c") ("b", "a", "d") ("b", "c", "a") ("b", "c", "d") ("b", "d", "a") ("b", "d", "c") ("c", "a", "b") ("c", "a", "d") ("c", "b", "a") ("c", "b", "d") ("c", "d", "a") ("c", "d", "b") ("d", "a", "b") ("d", "a", "c") ("d", "b", "a") ("d", "b", "c") ("d", "c", "a") ("d", "c", "b")
combinations:按照給定位數(shù)對(duì)可迭代對(duì)象內(nèi)元素進(jìn)行組合,但是結(jié)果不重復(fù)
listed = ["a","b","c","d"] for i in combinations(listed,3): print(i) #以下是輸出結(jié)果 ("a", "b", "c") ("a", "b", "d") ("a", "c", "d") ("b", "c", "d")
combinations_with_replacement:與combinations區(qū)別就是同一元素可以使用多次
listed = ["a","b","c"] #由于結(jié)果數(shù)據(jù)太多,我減少源數(shù)據(jù)量 for i in combinations_with_replacement(listed,3): print(i) #以下是輸出結(jié)果 ("a", "a", "a") ("a", "a", "b") ("a", "a", "c") ("a", "b", "b") ("a", "b", "c") ("a", "c", "c") ("b", "b", "b") ("b", "b", "c") ("b", "c", "c") ("c", "c", "c")
zip_longest:對(duì)多個(gè)數(shù)據(jù)按索引進(jìn)行組合,并根據(jù)迭代對(duì)象的大小,不足使用fillvalue默認(rèn)值替代
a=[1,2,3] b=["a","b"] for i in zip_longest(a,b,fillvalue="nihao"): print(i) for i in zip(a,b): print(i) #zip是一個(gè)python內(nèi)置函數(shù),與zip_longest不同的是匹配到迭代對(duì)象最小的最后元素就結(jié)束 #結(jié)果對(duì)比: zip_lengest: zip: (1, "a") (1, "a") (2, "b") (2, "b") (3, "nihao")
dropwhile:對(duì)可迭代對(duì)象的元素依次進(jìn)行函數(shù)過(guò)濾,遇到返回False的元素就停止
listed=[-1,0,-3,2,-5,4,2] for i in dropwhile(lambda s:s<3,listed): print(i) #輸出結(jié)果: 4 2
product:可以說(shuō)是combinations的升級(jí)版,對(duì)多個(gè)序列進(jìn)行組合,且無(wú)重復(fù)
list1=[1,2,3] list2=[4,5] list3=["a"] for i in product(list1,list2,list3): print(i) #結(jié)果: (1, 4, "a") (1, 5, "a") (2, 4, "a") (2, 5, "a") (3, 4, "a") (3, 5, "a")
islice:對(duì)迭代器,可迭代對(duì)象進(jìn)行切片操作
iter=(i for i in range(10)) for i in islice(iter,0,10,2): print(i) #結(jié)果為: 0 2 4 6 8
chain:對(duì)多個(gè)可迭代對(duì)象進(jìn)行組合
list1=[1,2,3] set1={"a","b"} for i in chain(list1,set1): print(i)
總結(jié):itertools這個(gè)模塊可以解決以后我們對(duì)多個(gè)iterable進(jìn)行組合的問(wèn)題。
更詳細(xì)的分類可以參考:https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42822.html
摘要:例如,以下對(duì)兩個(gè)的相應(yīng)元素求和這個(gè)例子很好的解釋了如何構(gòu)建中所謂的迭代器代數(shù)的函數(shù)的含義。為簡(jiǎn)單起見(jiàn),假設(shè)輸入的長(zhǎng)度可被整除。接受兩個(gè)參數(shù)一個(gè)可迭代的正整數(shù)最終會(huì)在中個(gè)元素的所有組合的元組上產(chǎn)生一個(gè)迭代器。 前言 大家好,今天想和大家分享一下我的itertools學(xué)習(xí)體驗(yàn)及心得,itertools是一個(gè)Python的自帶庫(kù),內(nèi)含多種非常實(shí)用的方法,我簡(jiǎn)單學(xué)習(xí)了一下,發(fā)現(xiàn)可以大大提升工作...
摘要:三國(guó)時(shí)代著名的兵器鑒別家呂虔根據(jù)兵器的特點(diǎn)對(duì)漢武帝欽定的十八般兵器重新排列為九長(zhǎng)九短。明代五雜俎和清代堅(jiān)集兩書所載十八般兵器為弓弩槍刀劍矛盾斧鉞戟黃锏撾殳棍叉耙頭錦繩套索白打拳術(shù)。后人稱其為小十八般。 知識(shí)點(diǎn) 在古典小說(shuō)和傳統(tǒng)評(píng)話中,常說(shuō)武藝高強(qiáng)的人是十八般武藝樣樣精通...
摘要:常規(guī)的使用來(lái)統(tǒng)計(jì)一段代碼運(yùn)行時(shí)間的例子輸出結(jié)果總結(jié)其實(shí)是一門特別人性化的語(yǔ)言,但凡在工程中經(jīng)常遇到的問(wèn)題,處理起來(lái)比較棘手的模式基本都有對(duì)應(yīng)的比較優(yōu)雅的解決方案。 python的高級(jí)特性 名詞與翻譯對(duì)照表 generator 生成器 iterator 迭代器 collection 集合 pack/unpack 打包/解包 decorator 裝飾器 context manager ...
摘要:上一篇文章實(shí)用技法第篇對(duì)自定義類對(duì)象排序下一篇文章實(shí)用技法第篇篩選序列中的元素需求 上一篇文章:Python實(shí)用技法第13篇:對(duì)自定義類對(duì)象排序:attrgetter下一篇文章:Python實(shí)用技法第15篇:篩選序列中的元素 1、需求
摘要:?jiǎn)卧卦孢@是整數(shù)這才是元祖也許這兩行,你們當(dāng)時(shí)疑惑過(guò),并且現(xiàn)在也都知道了,當(dāng)然重點(diǎn)并不在這里。。雖然我水平很垃圾,但是我知道匿名函數(shù)有一種執(zhí)行方式叫做自執(zhí)行??窗?,這就是版的匿名函數(shù)自執(zhí)行方法。 單元素元祖: a = (1) # 這是整數(shù)1 a = (1,) # 這才是元祖 也許這兩行,你們當(dāng)時(shí)疑惑過(guò),并且現(xiàn)在也都知道了,當(dāng)然重點(diǎn)并不在這里。。 我無(wú)聊的時(shí)候想過(guò),為什么單...
閱讀 3022·2021-10-08 10:18
閱讀 737·2019-08-30 15:54
閱讀 1071·2019-08-29 18:43
閱讀 2447·2019-08-29 15:33
閱讀 1307·2019-08-29 15:29
閱讀 1609·2019-08-29 13:29
閱讀 1030·2019-08-26 13:46
閱讀 1703·2019-08-26 11:55