激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python編程itertools模塊處理可迭代集合相關(guān)函數(shù)

Python編程itertools模塊處理可迭代集合相關(guān)函數(shù)

2022-01-05 00:27夢(mèng)想橡皮擦 Python

本篇博客將為你介紹Python函數(shù)式編程itertools模塊中處理可迭代集合的相關(guān)函數(shù),有需要的朋友可以借鑒參考下,希望可以有所幫助

容器與可迭代對(duì)象

在正式開始前先補(bǔ)充一些基本概念在 Python 中存在容器 與 可迭代對(duì)象

  • 容器:用來存儲(chǔ)多個(gè)元素的數(shù)據(jù)結(jié)構(gòu),例如 列表,元組,字典,集合等內(nèi)容;
  • 可迭代對(duì)象:實(shí)現(xiàn)了 __iter__ 方法的對(duì)象就叫做可迭代對(duì)象。

從可迭代對(duì)象中還衍生出 迭代器 與 生成器:

  • 迭代器:既實(shí)現(xiàn)了 __iter__,也實(shí)現(xiàn)了 __next__ 方法的對(duì)象叫做迭代器;
  • 生成器:具有 yield 關(guān)鍵字的函數(shù)都是生成器。

這樣就比較清楚了,可迭代對(duì)象的范圍要大于容器。而且可迭代對(duì)象只能使用一次,使用完畢再獲取值就會(huì)提示 StopIteration 異常。

除此之外,可迭代對(duì)象還有一些限制:

  • 不能對(duì)可迭代對(duì)象使用 len 函數(shù);
  • 可以使用 next 方法處理可迭代對(duì)象,容器也可以通過 iter 函數(shù)轉(zhuǎn)換成迭代器;
  • for 語句會(huì)自動(dòng)調(diào)用容器的 iter 函數(shù),所以容器也能被循環(huán)迭代。

count() 函數(shù)

count 函數(shù)一般與 range 函數(shù)對(duì)比學(xué)習(xí),例如 range 函數(shù)需要定義生成范圍的下限,上限與步長(zhǎng)可選,而 count 函數(shù)不同,指定下限與步長(zhǎng),上限值不用聲明。

函數(shù)原型聲明如下

count(start=0, step=1) --> count object

測(cè)試代碼如下,其中必須添加跳出循環(huán)的判定條件,否則代碼會(huì)一直運(yùn)行下去。

?
1
2
3
4
5
6
from itertools import count
a = count(5, 10)
for i in a:
    print(i)
    if i > 100:
        break

除此之外,count 函數(shù)還接收非整數(shù)參數(shù),所以下述代碼中定義的也是正確的。

?
1
2
3
4
5
6
from itertools import count
a = count(0.5, 0.1)
for i in a:
    print(i)
    if i > 100:
        break

cycle 函數(shù)

cycle 函數(shù)可以循環(huán)一組值,測(cè)試代碼如下所示:

?
1
2
3
4
5
6
7
8
from itertools import cycle
x = cycle('夢(mèng)想橡皮擦abcdf')
for i in range(5):
    print(next(x), end=" ")
print("\n")
print("*" * 100)
for i in range(5):
    print(next(x), end=" ")

代碼輸出如下內(nèi)容:

夢(mèng) 想 橡 皮 擦
****************************************************************************************************
a b c d f

可以看到 cycle 函數(shù)與 for 循環(huán)非常類似。

repeat 函數(shù)

repeat 函數(shù)用于重復(fù)返回某個(gè)值,官方給出的函數(shù)描述如下所示:

?
1
2
3
4
5
class repeat(object):
    """
    repeat(object [,times]) -> create an iterator which returns the object
    for the specified number of times.  If not specified, returns the object
    endlessly.

進(jìn)行一下簡(jiǎn)單的測(cè)試,看一下效果:

?
1
2
3
4
5
6
7
8
from itertools import repeat
x = repeat('橡皮擦')
for i in range(5):
    print(next(x), end=" ")
print("\n")
print("*" * 100)
for i in range(5):
    print(next(x), end=" ")

怎么看這個(gè)函數(shù),都好像沒有太大用處。

enumerate 函數(shù),添加序號(hào)

這個(gè)函數(shù)在前面的文章中,已經(jīng)進(jìn)行過簡(jiǎn)單介紹,并且該函數(shù)在 __builtins__ 包中,所以不再過多說明

基本格式如下所示:

enumerate(sequence, [start=0])

其中 start 參數(shù)是下標(biāo)起始位置。

accumulate 函數(shù)

該函數(shù)基于給定的函數(shù)返回一個(gè)可迭代對(duì)象,默認(rèn)是累加效果,即第二個(gè)參數(shù)為 operator.add,測(cè)試代碼如下:

?
1
2
3
4
from itertools import accumulate
data = [1, 2, 3, 4, 5]
# 計(jì)算累積和
print(list(accumulate(data)))  # [1, 3, 6, 10, 15]

針對(duì)上述代碼,修改為累積。

?
1
2
3
4
5
from itertools import accumulate
import operator
data = [1, 2, 3, 4, 5]
# 計(jì)算累積
print(list(accumulate(data, operator.mul)))

除此之外,第二個(gè)參數(shù)還可以為 maxmin 等函數(shù),例如下述代碼:

?
1
2
3
from itertools import accumulate
data = [1, 4, 3, 2, 5]
print(list(accumulate(data, max)))

代碼輸出如下內(nèi)容,其實(shí)是將 data 里面的任意兩個(gè)值進(jìn)行了比較,然后留下最大的值。

[1, 4, 4, 4, 5]

chain 與 groupby 函數(shù)

chain 函數(shù)用于將多個(gè)迭代器組合為單個(gè)迭代器,而 groupby 可以將一個(gè)迭代器且分為多個(gè)子迭代器。

首先展示一下 groupby 函數(shù)的應(yīng)用:

?
1
2
3
from itertools import groupby
a = list(groupby('橡橡皮皮擦擦'))
print(a)

輸出內(nèi)容如下所示:

[('橡', <itertools._grouper object at 0x0000000001DD9438>),
('皮', <itertools._grouper object at 0x0000000001DD9278>),
('擦', <itertools._grouper object at 0x00000000021FF710>)]

為了使用 groupby 函數(shù),建議先對(duì)原列表進(jìn)行排序,因?yàn)樗怯悬c(diǎn)像切片一樣,發(fā)現(xiàn)不同的就分出一個(gè)迭代器。

chain 函數(shù)的用法如下,將多個(gè)迭代對(duì)象進(jìn)行拼接:

?
1
2
3
from itertools import groupby, chain
a = list(chain('ABC', 'AAA', range(1,3)))
print(a)

zip_longest 與 zip

zip 函數(shù)在之前的博客中已經(jīng)進(jìn)行過說明,zip_longestzip 的區(qū)別就是,zip 返回的結(jié)果以最短的序列為準(zhǔn),而 zip_longest 以最長(zhǎng)的為準(zhǔn)。

測(cè)試代碼如下,自行比對(duì)結(jié)果即可。

?
1
2
3
4
5
from itertools import zip_longest
a = list(zip('ABC', range(5), [10, 20, 30, 40]))
print(a)
a = list(zip_longest('ABC', range(5), [10, 20, 30, 40]))
print(a)

zip_logest 如果碰到長(zhǎng)度不一致的序列,缺少部分會(huì)填充 None

tee 函數(shù)

tee 函數(shù)可以克隆可迭代對(duì)象,產(chǎn)出多個(gè)生成器,每個(gè)生成器都可以產(chǎn)出輸入的各個(gè)元素。

?
1
2
3
from itertools import tee
a = list(tee('橡皮擦'))
print(a)

compress 函數(shù)

該函數(shù)通過謂詞(是否,True/False)來確定對(duì)某個(gè)元素的取舍問題,最簡(jiǎn)單的代碼如下所示:

?
1
2
3
from itertools import compress
a = list(compress('橡皮擦', (0, 1, 1)))
print(a)

islice、dropwhile、takewhile、filterfalse、filter

這幾個(gè)函數(shù)都是從輸入的可迭代對(duì)象中獲取一個(gè)子集,而且不修改元素本身。

本部分只羅列各個(gè)函數(shù)的原型聲明,具體用法直接參考使用即可。

?
1
2
3
4
5
islice(iterable, stop) --> islice object
islice(iterable, start, stop[, step]) --> islice object
dropwhile(predicate, iterable) --> dropwhile object
takewhile(predicate, iterable) --> takewhile object
filterfalse(function or None, sequence) --> filterfalse object

其中只有 filterfalse 中的參數(shù)是函數(shù)在前,序列在后。

測(cè)試代碼如下,尤其注意第一個(gè)參數(shù)是 callable 即函數(shù)。

?
1
2
3
from itertools import islice, dropwhile, takewhile, filterfalse
a = list(filterfalse(lambda x: x in ["皮", "擦"], '橡皮擦'))
print(a)

寫在后面

以上內(nèi)容就是本文的全部?jī)?nèi)容,在使用無限迭代器函數(shù) countcyclerepeat 的時(shí)候,一定要注意即使停止。

以上就是Python編程itertools模塊處理可迭代集合相關(guān)函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于Python編程itertools模塊處理可迭代集合函數(shù)的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/hihell/article/details/120181580

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: h色视频网站 | 最新午夜综合福利视频 | 国产精品中文在线 | 粉嫩蜜桃麻豆免费大片 | 久久久久久久一区二区 | 一级黄色大片在线观看 | www.91sao| 久久久日韩精品一区二区 | 日本爽快片100色毛片视频 | 免费午夜视频在线观看 | 91久久国产露脸精品免费 | 中文字幕欧美在线 | 欧美成人区 | 国产在线欧美 | 成人在线a | 精品免费久久 | 九九热精| 最新欧美精品一区二区三区 | 亚洲一区 国产 | 欧美一级做性受免费大片免费 | 欧美三级毛片 | 国产精选电影免费在线观看网站 | 成人免费一区二区三区在线观看 | 欧美videofree性欧美另类 | 夜添久久精品亚洲国产精品 | 51国产偷自视频区视频小蝌蚪 | 高清一区二区在线观看 | 91丨九色丨国产在线观看 | 成人在线视频精品 | 国产乱淫a∨片免费观看 | 日本亚洲欧美 | 一级国产免费 | 欧美亚洲综合在线 | 3级毛片| hd性videos意大利复古 | 亚洲一二三久久 | 精品久久久久久综合日本 | xxx18hd18hd日本| 日本成人午夜视频 | 成人免费一区二区三区视频网站 | 久久99国产精品免费网站 |