最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python迭代器模塊itertools常用的方法

 更新時(shí)間:2022年09月15日 15:04:37   作者:Python熱愛(ài)者  
這篇文章主要介紹了python迭代器模塊itertools常用的方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

itertools是python中內(nèi)置的一種高效的生成各種迭代器或者是類的模塊,這些函數(shù)的返回值為一個(gè)迭代器,經(jīng)常被用在for循環(huán)中,當(dāng)然,也可直接使用next()方法取值,今天就來(lái)說(shuō)說(shuō)itertools中的常用方法.

itertools按照迭代器的功能可分為三類:

  • 無(wú)限迭代器: 生成一個(gè)無(wú)限序列,比如自然數(shù)序列 1, 2, 3, 4, …
  • 有限迭代器: 接收一個(gè)或多個(gè)序列(sequence)作為參數(shù),進(jìn)行組合、分組和過(guò)濾等;
  • 組合迭代器: 序列的排列、組合,求序列的笛卡兒積等

1.無(wú)限迭代器

itertools.count(start=0, step=1)

創(chuàng)建一個(gè)迭代器,生成從n開始的連續(xù)整數(shù),如果忽略n,則從0開始計(jì)算(注意:此迭代器不支持長(zhǎng)整數(shù)),如果超出了sys.maxint,計(jì)數(shù)器將溢出并繼續(xù)從-sys.maxint-1開始計(jì)算

  • start: 起始值,默認(rèn)為0
  • step: 步長(zhǎng),默認(rèn)為1
import itertools
a = itertools.count()
for x in a:
    if x > 5:
        break
    print(x)

輸出:

1
2
3
4
5
6

b = itertools.count(2,3)
for x in b:
    if x > 10:
        break
    print(x)

輸出:

2
5
8

itertools.cycle(iterable)

創(chuàng)建一個(gè)迭代器,對(duì)iterable中的元素反復(fù)執(zhí)行循環(huán)操作,內(nèi)部會(huì)生成iterable中的元素的一個(gè)副本,此副本用于返回循環(huán)中的重復(fù)項(xiàng)

iterable: 可迭代對(duì)象,可以為一個(gè)列表、字符串、元組等

import itertools
a = ['a','b','c']
i = 0
for x in itertools.cycle(a):
    i = i +1
    if i > 5:
        break
    print(i,x)

輸出:

1,'a'
2,'b'
3,'c'
4,'a'
5,'b'

itertools.repeat(object[, times])

創(chuàng)建一個(gè)迭代器,重復(fù)生成object,times(如果已提供)指定重復(fù)計(jì)數(shù),如果未提供times,將無(wú)止盡返回該對(duì)象

  • object: 需要重復(fù)的對(duì)象,對(duì)象是個(gè)整體
  • times: 重復(fù)次數(shù)
import itertools
for x in itertools.repeat([1,2,3],3):
    print(x)

輸出:

[1,2,3]
[1,2,3]
[1,2,3]

2.有限迭代器

itertools.chain(iterable1, iterable2, …)

將多個(gè)迭代器作為參數(shù), 但只返回單個(gè)迭代器, 它產(chǎn)生所有參數(shù)迭代器的內(nèi)容, 就好像他們是來(lái)自于一個(gè)單一的序列
參數(shù)為多個(gè)可迭代對(duì)象,就好像被鏈條銜接起來(lái)了一樣

import itertools
for x in itertools.chain([1,2,3],'abc'):
    print(x)

輸出:

1
2
3
'a'
'b'
'c'

for x in itertools.chain([1,2,3],['a','b','c']):
    print(x)

輸出:

1
2
3
'a'
'b'
'c'

itertools.chain.from_iterable(iterable)

接收一個(gè)可迭代對(duì)象作為參數(shù),返回一個(gè)迭代器

from itertools import chain
a = [['first','second','thrid'],['a','b','c']]
b = [[1,2,3],[4,5,6]]
for x in range(len(a)):
    list(chain.from_iterable(zip(a[x],b[x])))

輸出:

['first', 1, 'second', 2, 'thrid', 3]
['a', 4, 'b', 5, 'c', 6]

itertools.compress(data, selectors)

#可用于對(duì)數(shù)據(jù)進(jìn)行篩選,當(dāng) selectors 的某個(gè)元素為 true 時(shí),則保留 data 對(duì)應(yīng)位置的元素,否則去除
#data: 待篩選數(shù)據(jù)
#selectors: 當(dāng)為真時(shí),保留data對(duì)應(yīng)位的數(shù)據(jù),為假或?yàn)榭諘r(shí)則去除

from itertools import compress
for x in compress(['a','b','c','d'],[1,0,2]):
    print(x)

輸出:

'a'
'c'
# 2 也為真,'d'對(duì)應(yīng)值為空算假

itertools.dropwhile(predicate, iterable)

創(chuàng)建一個(gè)迭代器,只要函數(shù)predicate(item)為True,就丟棄iterable中的項(xiàng),如果predicate返回False,就會(huì)生成iterable中的項(xiàng)和所有后續(xù)項(xiàng),即第一個(gè)不滿足條件的項(xiàng)及它后面所有的項(xiàng)都返回

  • predicate: 函數(shù)
  • iterable: 可迭代對(duì)象
from itertools import dropwhile
list(dropwhile(lambda x: x < 5, [1, 3, 6, 2, 1]))

輸出:

[6,2,1]
#從6開始不符合x < 5 條件,所以6及6后面所有的項(xiàng)都需要返回

itertools.takewhile(predicate, iterable)

創(chuàng)建一個(gè)迭代器,如果predicate返回False,立即停止迭代

from itertools import takewhile
list(takewhile(lambda x: x < 5, [1, 3, 6, 2, 1]))

輸出:

[1,3]

itertools.ifilter(predicate, iterable)

創(chuàng)建一個(gè)迭代器,僅生成iterable中predicate(item)為True的項(xiàng),如果predicate為None,將返回iterable中所有計(jì)算為True的項(xiàng)

  • predicate: 函數(shù)
  • iterable: 可迭代對(duì)象
from itertools import ifilter
list(ifilter(lambda x: x < 5, [1, 3, 6, 2, 1]))

輸出:

[1,3,2,1]

itertools.ifilterfalse(predicate, iterable)

創(chuàng)建一個(gè)迭代器,僅生成iterable中predicate(item)為False的項(xiàng),如果predicate為None,將返回iterable中所有計(jì)算False的項(xiàng),該函數(shù)正好跟ifilter相反

  • predicate: 函數(shù)
  • iterable: 可迭代對(duì)象
from itertools import ifilterfalse
list(ifilterfalse(lambda x: x < 5, [1, 3, 6, 2, 1]))

輸出:

[6]

itertools.groupby(iterable[, key])

返回一個(gè)產(chǎn)生按照key進(jìn)行分組后的值集合的迭代器

  • iterable:可迭代對(duì)象
  • key: 一個(gè)函數(shù),該函數(shù)的返回值做為分組的標(biāo)準(zhǔn)
from itertools import groupby
a = ['aa', 'ab', 'abc', 'bcd', 'abcde']
for i, k in groupby(a, len):
     print (i, list(k))

輸出:

2,['aa', 'ab']
3,['abc', 'bcd']
5,['abcde']

itertools.islice(iterable, stop)

iterable 是可迭代對(duì)象,start 是開始索引,默認(rèn)為0,stop 是結(jié)束索引,step 是步長(zhǎng),默認(rèn)為1,start 和 step 可選

from itertools import islice,count
list(islice([10, 6, 2, 8, 1, 3, 9], 5))

輸出:

[[10, 6, 2, 8, 1]

list(islice(count(), 3, 10 ,2))

輸出:

 [3,5,7,9]
 #這里的count()為文章第一個(gè)函數(shù),用來(lái)產(chǎn)生無(wú)限序列

itertools.imap(func, iter1, iter2, iter3, …)

imap(func, iter1, iter2, iter3, …)
返回一個(gè)迭代器, 它是調(diào)用了一個(gè)其值在輸入迭代器上的函數(shù), 返回結(jié)果. 它類似于內(nèi)置函數(shù) map() , 只是前者在任意輸入迭代器結(jié)束后就停止(而不是插入None值來(lái)補(bǔ)全所有的輸入)
注意: 該函數(shù)在python3.x中已不存在,可直接使用map

from itertools import imap
list(imap(pow, [2, 3, 10], [4, 2, 3]))

輸出:

[16, 9, 1000]
#pow函數(shù) 求指數(shù)

itertools.izip(*iterables)

用于將多個(gè)可迭代對(duì)象對(duì)應(yīng)位置的元素作為一個(gè)元組,將所有元組『組成』一個(gè)迭代器,并返回
注意: 該函數(shù)在python3.x中已不存在,可直接使用zip

from itertools import izip
for item in izip([1, 2, 3], ['a', 'b', 'c', 'd', 'e']):
    print(item)

輸出:

(1, 'a')
(2, 'b')
(3, 'c')

*itertools.izip_longest(iterables, [fillvalue=None])

izip_longest 跟 izip 類似,但迭代過(guò)程會(huì)持續(xù)到所有可迭代對(duì)象的元素都被迭代完

注意: 該函數(shù)在python3.x中已不存在

from itertools import izip_longest
for item in izip_longest([1, 2, 3], ['a', 'b', 'c', 'd', 'e'],fillvalue='-'):
    print(item)

輸出:

(1, 'a')
(2, 'b')
(3, 'c')
('-','d')
('-','e')

3.組合迭代器

*itertools.product(iterables[, repeat])

創(chuàng)建一個(gè)迭代器,生成表示item1,item2等中的項(xiàng)目的笛卡爾積的元組,repeat是一個(gè)關(guān)鍵字參數(shù),指定重復(fù)生成序列的次數(shù)。
用來(lái)產(chǎn)生笛卡爾積

import itertools
a = (1, 2, 3)
b = ('A', 'B', 'C')
c = itertools.product(a,b)
for elem in c:
    print(elem)

輸出:

(1, 'A')
(1, 'B')
(1, 'C')
(2, 'A')
(2, 'B')
(2, 'C')
(3, 'A')
(3, 'B')
(3, 'C')

list(product((0,1), (0,1), (0,1)))

輸出:

[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

list(product('ABC', repeat=2))

輸出:

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

itertools.product的簡(jiǎn)單使用:

from itertools import product  # 迭代器

# test script
for i j in product(range(10),range(10))
    
print(i,j)
# 同理等于兩個(gè)for循環(huán)嵌套,只是這種寫法遠(yuǎn)行速度遍歷會(huì)快一些,時(shí)間復(fù)雜度減小。
for x in range(10):
    for y in range(10):
    print(x,y)

itertools.permutations(iterable[, r])

創(chuàng)建一個(gè)迭代器,返回iterable中所有長(zhǎng)度為r的項(xiàng)目序列,如果省略了r,那么序列的長(zhǎng)度與iterable中的項(xiàng)目數(shù)量相同: 返回p中任意取r個(gè)元素做排列的元組的迭代器

from itertools import permutations
list(permutations('ABC', 2))

輸出:

[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

itertools.combinations(iterable, r)

創(chuàng)建一個(gè)迭代器,返回iterable中所有長(zhǎng)度為r的子序列,返回的子序列中的項(xiàng)按輸入iterable中的順序排序 (不帶重復(fù))

from itertools import combinations
list(combinations('ABC', 2))

輸出:

[('A', 'B'), ('A', 'C'), ('B', 'C')]

itertools.combinations_with_replacement(iterable, r)

創(chuàng)建一個(gè)迭代器,返回iterable中所有長(zhǎng)度為r的子序列,返回的子序列中的項(xiàng)按輸入iterable中的順序排序 (帶重復(fù))

from itertools import combinations_with_replacement
list(combinations_with_replacement('ABC', 2))

輸出:

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

到此這篇關(guān)于python迭代器模塊itertools常用的方法的文章就介紹到這了,更多相關(guān)python itertools 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • numpy 聲明空數(shù)組詳解

    numpy 聲明空數(shù)組詳解

    今天小編就為大家分享一篇numpy 聲明空數(shù)組詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python萬(wàn)物皆對(duì)象理解及源碼學(xué)習(xí)

    Python萬(wàn)物皆對(duì)象理解及源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Python萬(wàn)物皆對(duì)象的源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 基于Python編寫簡(jiǎn)易版的天天跑酷游戲的示例代碼

    基于Python編寫簡(jiǎn)易版的天天跑酷游戲的示例代碼

    這篇文章主要介紹了如何利用Python編寫一個(gè)簡(jiǎn)易版的天天跑酷游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-03-03
  • python文件與目錄操作實(shí)例詳解

    python文件與目錄操作實(shí)例詳解

    這篇文章主要介紹了python文件與目錄操作方法,結(jié)合實(shí)例形式詳細(xì)分析了Python關(guān)于文件與目錄操作的常見技巧與使用方法,需要的朋友可以參考下
    2016-02-02
  • Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解

    Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解

    這篇文章主要介紹了Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python實(shí)現(xiàn)簡(jiǎn)易云音樂(lè)播放器

    python實(shí)現(xiàn)簡(jiǎn)易云音樂(lè)播放器

    這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)易云音樂(lè)播放器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python中json.dumps和json.dump區(qū)別

    python中json.dumps和json.dump區(qū)別

    json.dumps將Python對(duì)象序列化為JSON字符串,json.dump直接將Python對(duì)象序列化寫入文件,本文就來(lái)介紹一下兩個(gè)的使用及區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • PyQt5學(xué)習(xí)之QThread類的使用詳解

    PyQt5學(xué)習(xí)之QThread類的使用詳解

    QThread是Qt線程類中最核心的底層類。要使用QThrea開始一個(gè)線程,可以創(chuàng)建它的一個(gè)子類,然后覆蓋其QThread.run()函數(shù)。這篇文章就來(lái)和大家聊聊QThread類的使用,感興趣的可以學(xué)習(xí)一下
    2022-12-12
  • python 實(shí)現(xiàn)波浪濾鏡特效

    python 實(shí)現(xiàn)波浪濾鏡特效

    這篇文章主要介紹了python 實(shí)現(xiàn)波浪濾鏡特效的方法,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • Python嵌套循環(huán)的使用

    Python嵌套循環(huán)的使用

    本文主要介紹了Python嵌套循環(huán)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-02-02

最新評(píng)論

余江县| 佳木斯市| 隆回县| 南开区| 大同县| 沭阳县| 濉溪县| 平阴县| 福建省| 文登市| 丹江口市| 玉门市| 盐池县| 九寨沟县| 阳泉市| 门源| 嘉黎县| 资中县| 合江县| 深圳市| 星子县| 视频| 榆中县| 德钦县| 枣阳市| 天镇县| 江油市| 休宁县| 民和| 紫金县| 淮南市| 资讯 | 连江县| 家居| 青阳县| 麦盖提县| 宜昌市| 望都县| 博兴县| 弥渡县| 永泰县|