[转]itertools --- 为高效循环而创建迭代器的函数

技术_编程语言 专栏收录该内容
128 篇文章 0 订阅

本模块实现一系列 iterator ,这些迭代器受到APL,Haskell和SML的启发。为了适用于Python,它们都被重新写过。

本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯Python中有可能创建简洁又高效的专用工具。

例如,SML有一个制表工具: tabulate(f),它可产生一个序列 f(0), f(1), ...。在Python中可以组合 map() 和 count() 实现: map(f, count())

这些内置工具同时也能很好地与 operator 模块中的高效函数配合使用。例如,我们可以将两个向量的点积映射到乘法运算符: sum(map(operator.mul, vector1, vector2)) 。

无穷迭代器:

迭代器实参结果示例
count()start, [step]start, start+step, start+2*step, ...count(10) --> 10 11 12 13 14...
cycle()pp0, p1, ... plast, p0, p1, ...cycle('ABCD') --> A B C D A B CD ...
repeat()elem [,n]elem, elem, elem, ... 重复无限次或n次repeat(10, 3) --> 10 10 10

根据最短输入序列长度停止的迭代器:

迭代器实参结果示例
accumulate()p [,func]p0, p0+p1, p0+p1+p2, ...accumulate([1,2,3,4,5]) --> 1 3 610 15
chain()p, q, ...p0, p1, ... plast, q0, q1, ...chain('ABC', 'DEF') --> A B C D EF
chain.from_iterable()iterablep0, p1, ... plast, q0, q1, ...chain.from_iterable(['ABC','DEF']) --> A B C D E F
compress()data, selectors(d[0] if s[0]), (d[1] if s[1]), ...compress('ABCDEF', [1,0,1,0,1,1])--> A C E F
dropwhile()pred, seqseq[n], seq[n+1], ... 从pred首次真值测试失败开始dropwhile(lambda x: x<5,[1,4,6,4,1]) --> 6 4 1
filterfalse()pred, seqseq中pred(x)为假值的元素,x是seq中的元素。filterfalse(lambda x: x%2,range(10)) --> 0 2 4 6 8
groupby()iterable[, key]根据key(v)值分组的迭代器 
islice()seq, [start,] stop [, step]seq[start:stop:step]中的元素islice('ABCDEFG', 2, None) --> CD E F G
starmap()func, seqfunc(*seq[0]), func(*seq[1]), ...starmap(pow, [(2,5), (3,2),(10,3)]) --> 32 9 1000
takewhile()pred, seqseq[0], seq[1], ..., 直到pred真值测试失败takewhile(lambda x: x<5,[1,4,6,4,1]) --> 1 4
tee()it, nit1, it2, ... itn 将一个迭代器拆分为n个迭代器 
zip_longest()p, q, ...(p[0], q[0]), (p[1], q[1]), ...zip_longest('ABCD', 'xy',fillvalue='-') --> Ax By C- D-

排列组合迭代器:

迭代器实参结果
product()p, q, ... [repeat=1]笛卡尔积,相当于嵌套的for循环
permutations()p[, r]长度r元组,所有可能的排列,无重复元素
combinations()p, r长度r元组,有序,无重复元素
combinations_with_replacement()p, r长度r元组,有序,元素可重复
product('ABCD', repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DCDD
permutations('ABCD', 2) AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2) AB AC AD BC BD CD
combinations_with_replacement('ABCD',2) AA AB AC AD BB BC BD CC CD DD

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值