日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

相见恨晚的 Python 内置库:itertools

發(fā)布時間:2023/12/19 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 相见恨晚的 Python 内置库:itertools 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
來源 : 憶先

01 前言

很多人都致力于把Python代碼寫得更Pythonic,一來更符合規(guī)范且容易閱讀,二來一般Pythonic的代碼在執(zhí)行上也更有效率。今天就先給大家介紹一下Python的系統(tǒng)庫itertools。

02 itertools庫

迭代器(生成器)在Python中是一種很常用也很好用的數(shù)據(jù)結(jié)構(gòu),比起列表(list)來說,迭代器最大的優(yōu)勢就是延遲計算,按需使用,從而提高開發(fā)體驗和運(yùn)行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。

話雖這么說但大家平時用到的迭代器大概只有range了,而通過iter函數(shù)把列表對象轉(zhuǎn)化為迭代器對象又有點(diǎn)多此一舉,這時候我們今天的主角itertools就該上場了。

03 使用itertools

itertools中的函數(shù)大多是返回各種迭代器對象,其中很多函數(shù)的作用我們平時要寫很多代碼才能達(dá)到,而在運(yùn)行效率上反而更低,畢竟人家是系統(tǒng)庫。

itertools.accumulate

簡單來說就是累加。

>>>?import?itertools >>>?x?=?itertools.accumulate(range(10)) >>>?print(list(x)) [0,?1,?3,?6,?10,?15,?21,?28,?36,?45]

itertools.chain

連接多個列表或者迭代器。

>>>?x?=?itertools.chain(range(3),?range(4),?[3,2,1]) >>>?print(list(x)) [0,?1,?2,?0,?1,?2,?3,?3,?2,?1]

itertools.combinations

求列表或生成器中指定數(shù)目的元素不重復(fù)的所有組合

>>>?x?=?itertools.combinations(range(4),?3) >>>?print(list(x)) [(0,?1,?2),?(0,?1,?3),?(0,?2,?3),?(1,?2,?3)]

itertools.combinations_with_replacement

允許重復(fù)元素的組合

>>>?x?=?itertools.combinations_with_replacement('ABC',?2) >>>?print(list(x)) [('A',?'A'),?('A',?'B'),?('A',?'C'),?('B',?'B'),?('B',?'C'),?('C',?'C')]

itertools.compress

按照真值表篩選元素

>>>?x?=?itertools.compress(range(5),?(True,?False,?True,?True,?False)) >>>?print(list(x)) [0,?2,?3]

itertools.count

就是一個計數(shù)器,可以指定起始位置和步長

>>>?x?=?itertools.count(start=20,?step=-1) >>>?print(list(itertools.islice(x,?0,?10,?1))) [20,?19,?18,?17,?16,?15,?14,?13,?12,?11]

itertools.cycle

循環(huán)指定的列表和迭代器

>>>?x?=?itertools.cycle('ABC') >>>?print(list(itertools.islice(x,?0,?10,?1))) ['A',?'B',?'C',?'A',?'B',?'C',?'A',?'B',?'C',?'A']

itertools.dropwhile

按照真值函數(shù)丟棄掉列表和迭代器前面的元素

>>>?x?=?itertools.dropwhile(lambda?e:?e?<?5,?range(10)) >>>?print(list(x)) [5,?6,?7,?8,?9]

itertools.filterfalse

保留對應(yīng)真值為False的元素

>>>?x?=?itertools.filterfalse(lambda?e:?e?<?5,?(1,?5,?3,?6,?9,?4)) >>>?print(list(x)) [5,?6,?9]

itertools.groupby

按照分組函數(shù)的值對元素進(jìn)行分組

>>>?x?=?itertools.groupby(range(10),?lambda?x:?x?<?5?or?x?>?8)???????????????????????????????????????????????????????????????????????????????????????????????? >>>?for?condition,?numbers?in?x:?????????????????????????????????????????????????? ...?????print(condition,?list(numbers))???????????????????????????????????????????????????????????????????????????????????????????????????????? True?[0,?1,?2,?3,?4]?????????????????????????????????????????????????????????????? False?[5,?6,?7,?8]???????????????????????????????????????????????????????????????? True?[9]

itertools.islice

上文使用過的函數(shù),對迭代器進(jìn)行切片

>>>?x?=?itertools.islice(range(10),?0,?9,?2) >>>?print(list(x)) [0,?2,?4,?6,?8]

itertools.permutations

產(chǎn)生指定數(shù)目的元素的所有排列(順序有關(guān))

>>>?x?=?itertools.permutations(range(4),?3) >>>?print(list(x)) [(0,?1,?2),?(0,?1,?3),?(0,?2,?1),?(0,?2,?3),?(0,?3,?1),?(0,?3,?2),?(1,?0,?2),?(1,?0,?3),?(1,?2,?0),?(1,?2,?3),?(1,?3,?0),?(1,?3,?2),?(2,?0,?1),?(2,?0,3),?(2,?1,?0),?(2,?1,?3),?(2,?3,?0),?(2,?3,?1),?(3,?0,?1),?(3,?0,?2),?(3,?1,?0),?(3,?1,?2),?(3,?2,?0),?(3,?2,?1)]

itertools.product

產(chǎn)生多個列表和迭代器的(積)

>>>?x?=?itertools.product('ABC',?range(3)) >>> >>>?print(list(x)) [('A',?0),?('A',?1),?('A',?2),?('B',?0),?('B',?1),?('B',?2),?('C',?0),?('C',?1),?('C',?2)]

itertools.repeat

簡單的生成一個擁有指定數(shù)目元素的迭代器

>>>?x?=?itertools.repeat(0,?5) >>>?print(list(x)) [0,?0,?0,?0,?0]

itertools.starmap

類似map

>>>?x?=?itertools.starmap(str.islower,?'aBCDefGhI') >>>?print(list(x)) [True,?False,?False,?False,?True,?True,?False,?True,?False]

itertools.takewhile

與dropwhile相反,保留元素直至真值函數(shù)值為假。

>>>?x?=?itertools.takewhile(lambda?e:?e?<?5,?range(10)) >>>?print(list(x)) [0,?1,?2,?3,?4]

itertools.tee

這個函數(shù)我也不是很懂,似乎是生成指定數(shù)目的迭代器

>>>?x?=?itertools.tee(range(10),?2) >>>?for?letters?in?x: ...?????print(list(letters)) ... [0,?1,?2,?3,?4,?5,?6,?7,?8,?9] [0,?1,?2,?3,?4,?5,?6,?7,?8,?9]

itertools.zip_longest

類似于zip,不過已較長的列表和迭代器的長度為準(zhǔn)

>>>?x?=?itertools.zip_longest(range(3),?range(5)) >>>?y?=?zip(range(3),?range(5)) >>>?print(list(x)) [(0,?0),?(1,?1),?(2,?2),?(None,?3),?(None,?4)] >>>?print(list(y)) [(0,?0),?(1,?1),?(2,?2)]

04 結(jié)語

大概就總結(jié)到這里,不過老實說Python的各種語言特性和庫還是要多用才能熟練,最終達(dá)到隨手拈來的程度,裝逼的說就是由術(shù)入道。

-?END -

對比Excel系列圖書累積銷量達(dá)15w冊,讓你輕松掌握數(shù)據(jù)分析技能,可以在全網(wǎng)搜索書名進(jìn)行了解:

總結(jié)

以上是生活随笔為你收集整理的相见恨晚的 Python 内置库:itertools的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。