Python利出现用itertools模块生成迭代器

  介绍

今天就跟大家聊聊有关Python利出现用itertools模块生成迭代器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。出现

itertools模块中主要包含了一些用于生成迭代器的函数。在,Python 的交互式解释器中先导出现入itertools模块,然后输入,(e, e dir出现(itertools)如果不是e.startswith(& # 39; _ # 39;)],命令,即可看到该模块所包含的全部属性和函数:

在祝辞祝辞,[e  for  e 拷贝dir出现(itertools), if  not  e.startswith (& # 39; _ # 39;))   [& # 39;积累# 39;,,& # 39;链# 39;,,& # 39;组合# 39;,,& # 39;combinations_with_replacement& # 39;,, & # 39;压缩# 39;,,& # 39;计数# 39;,,& # 39;循环# 39;,,   & # 39;dropwhile& # 39;,, & # 39; filterfalse& # 39;,, & # 39; groupby& # 39;,, & # 39; islice& # 39;,, & # 39;排列# 39;,,& # 39;产品# 39;,,& # 39;重复# 39;,,& # 39;starmap& # 39;,, & # 39; takewhile& # 39;   ,& # 39;三通# 39;,,& # 39;zip_longest& # 39;]

从上面的输出结果可以看的出,itertools模块中的不少函数都可以用于生成迭代器。

先出现看itertools模块中三个生成无限迭代器的函数:

计数(开始,(步骤)):生成开始,开始+一步,开始+ 2 *一步,……的迭代器,其中一步默认为1。比如使用计数(10)生成的迭代器包含:10、11、12、13、14日....

周期(p):对序列p生成无限循环p0, p1,……p0, p1,……的迭代器。比如使用周期(& # 39;abcd # 39;)生成的迭代器包含:A, B, C, D, A, B, C, D,….

重复(elem [n]):生成无限个elem元素重复的迭代器,如果指定了参数n,则只生成n个elem元素,比如使用重复(10,3)生成的法代器包含:10、10、10 .

下面程序示范了使用上面三个函数来生成迭代器:

import  itertools  as 它   #,计数(10,3)生成10日13日16……迭代器   for  e  it.count拷贝(10,3):   ,,,印刷(e)   ,,,#,用于跳出无限循环   ,,,if  e 祝辞,20:   ,,,,,,,休息   打印(& # 39;- - - - - - - - - - - - - - - - # 39;)   my_counter =0   #,循环用于对序列生成无限循环的迭代器   for  e  it.cycle拷贝([& # 39;python # 39;,, & # 39;芬兰湾的科特林# 39;,,& # 39;迅速# 39;]):   ,,,印刷(e)   ,,,#,用于跳出无限循环   ,,,my_counter  +=1   ,,,if  my_counter 祝辞,7:   ,,,,,,,休息   打印(& # 39;- - - - - - - - - - - - - - - - # 39;)   #,重复用于生成n个元素重复的迭代器   for  e  it.repeat拷贝(& # 39;python # 39;,, 3):   ,,,印刷(e)

出现在itertools模块中还有一些常用的迭代器函数,如下所示:

积累(p [, func]):默认生成根据序列p元素累加的迭代器,p0, p0 + p1, p0 + p1 + p2,……序列,如果指定了func函数,则用func函数来计算下一个元素的值。

链(p, q,…):将多个序列里的元素“链”在一起生成新的序列。

压缩(数据选择器):根据选择器序列的值对数据序列的元素进行过滤。如果选择器[0]为真,则保留数据[0];如果选择器[1]为真,则保留数据[1]……依此类推。

dropwhile (pred seq):使用pred函数对seq序列进行过滤,从seq中第一个使用pred函数计算为虚假的元素开始,保留从该元素到序列结束的全部元素。

takewhile (pred seq):该函数和上一个函数恰好相反,使用pred函数对seq序列进行过滤,从seq中第一个使用pred函数计算为虚假的元素开始,去掉从该元素到序列结束的全部元素。

filterfalse (pred seq):使用pred函数对seq序列进行过滤,保留seq中使用pred计算为真正的元素,比如filterfalse(λx: x % 2,范围(10)),得到0,2,4,6,8 .

islice (seq[开始]停止[,]):其功能类似于序列的片方法,实际上就是返回seq[启动:停止:一步]的结果。

starmap (func seq):使用函数对seq序列的每个元素进行计算,将计算结果作为新的序列元素。当使用func计算序列元素时,支持序列解包,比如seq序列的元素长度为3,那么func可以是一个接收三个参数的函数,该函数将会根据这三个参数来计算新序列的元素。

zip_longest (p, q,…):将p, q等序列中的元素按索引合并成元组,这些元组将作为新序列的元素。

上面这些函数的测试程序如下:

import  itertools  as 它   #,默认使用累加的方式计算下一个元素的值   for  e  it.accumulate拷贝(范围(6)):   ,,,print (e,结束=& # 39;,,& # 39;),#,0,,1,,3,,6,10,15   打印(& # 39;\ n - - - - - - - - - - - - - - - - # 39;)   #,使用x * y的方式来计算迭代器下一个元素的值   for  e  it.accumulate拷贝(范围(1,,6),lambda , x,, y,, x  *, y):   ,,,print (e,结束=& # 39;,,& # 39;),#,1,,2,,6日,24日,120年   打印(& # 39;\ n - - - - - - - - - - - - - - - - # 39;)   #,将两个序列“链”在一起,生成新的迭代器   for  e  it.chain拷贝([& # 39;一个# 39;,,& # 39;b # 39;],,(& # 39;芬兰湾的科特林# 39;,,& # 39;迅速# 39;]):   ,,,print (e,结束=& # 39;,,& # 39;),#,& # 39;一个# 39;,,& # 39;b # 39;,, & # 39;芬兰湾的科特林# 39;,,& # 39;迅速# 39;   打印(& # 39;\ n - - - - - - - - - - - - - - - - # 39;)   #,根据第二个序列来筛选第一个序列的元素,   #,由于第二个序列只有中间两个元素为1(真正的),因此前一个序列只保留中间两个元素   for  e  it.compress拷贝([& # 39;一个# 39;,,& # 39;b # 39;,, & # 39;芬兰湾的科特林# 39;,,& # 39;迅速# 39;],,(0,1,1,0]):   ,,,print (e,结束=& # 39;,,& # 39;),#,只有:,& # 39;b # 39;,, & # 39;芬兰湾的科特林# 39;   打印(& # 39;\ n - - - - - - - - - - - - - - - - # 39;)   #,获取序列中从长度不小于4的元素开始,到结束的所有元素   for  e  it.dropwhile拷贝(lambda  x: len (x) & lt; 4,[& # 39;一个# 39;,,& # 39;b # 39;,, & # 39;芬兰湾的科特林# 39;,,& # 39;x # 39;,, & # 39; y # 39;]):   ,,,print (e,结束=& # 39;,,& # 39;),#,只有:,& # 39;芬兰湾的科特林# 39;,,& # 39;x # 39;,, & # 39; y # 39;   打印(& # 39;\ n - - - - - - - - - - - - - - - - # 39;)   #,去掉序列中从长度不小于4的元素开始,到结束的所有元素   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Python利出现用itertools模块生成迭代器