Python的一些内置高效迭代器

 

关于itertools中一些常见的迭代器函数

1. repeat函数
重复无限次或n次

list(repeat(10,3)) -> [10,10,10]
2. cycle函数
无限循环
cy = cycle("ABCD")
next(cy) --> A
next(cy) --> B
next(cy) --> C
next(cy) --> D
next(cy) --> A
...
3. count函数
count()   start, [step] start, start+step, start+2*step, ...
对数据按步长进行倍数累加
ac = count(10)
next(ac) --> 10, 11, 12 ...
_ac = count(10, 100)
next(_ac) --> 10, 110, 210 ...
4. 根据最短输入序列长度停止的迭代器
accumulate() p [,func] p0, p0+p1, p0+p1+p2, ...
accumulate([1,2,3,4,5]) --> 1 3 6 10 15

chain() p, q, ... p0, p1, ... plast, q0, q1, ...
chain('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, seq  seq[n], seq[n+1], ... 从pred首次真值测试失败开始
dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1

takewhile() pred, seq  seq[0], seq[1], ..., 直到pred真值测试失败结束
takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4

filterfalse() pred, seq  seq中pred(x)为假值的元素x是seq中的元素
filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8

zip_longest() p, q, ...  (p[0], q[0]), (p[1], q[1]), ...
zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-

5. islice函数
   islice('ABCDEFG', 2) --> A B
   islice('ABCDEFG', 2, 4) --> C D
   islice('ABCDEFG', 2, None) --> C D E F G
   islice('ABCDEFG', 0, None, 2) --> A C E G
  • 以上代码产生的都是迭代器,显示结果采用伪代码形式