Python2.4標準モジュールのひとつ。いろいろなiteratorを生成するための便利関数が入っている。
http://www.python.jp/doc/release/lib/module-itertools.html
レシピも参照。
http://www.python.jp/doc/release/lib/itertools-recipes.html
写経モードで。
# coding: cp932 import sys import os from itertools import * class ItertoolsTest: ''' >>> l=chain(range(5),range(3)) >>> list(l) [0, 1, 2, 3, 4, 0, 1, 2] >>> c=count() >>> c.next() 0 >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() 6 >>> c=count(100) >>> c.next() 100 >>> c.next() 101 >>> c.next() 102 >>> c.next() 103 >>> c.next() 104 >>> c=cycle(range(3)) >>> c.next() 0 >>> c.next() 1 >>> c.next() 2 >>> c.next() 0 >>> c.next() 1 >>> c.next() 2 >>> c.next() 0 >>> c.next() 1 >>> d=dropwhile(lambda x: x<5, range(10)) >>> list(d) [5, 6, 7, 8, 9] >>> g=groupby(range(10),lambda x: int(x/3)) >>> [(e[0],list(e[1])) for e in g] [(0, [0, 1, 2]), (1, [3, 4, 5]), (2, [6, 7, 8]), (3, [9])] >>> g=groupby(['age', 'alone', 'boy', 'big', 'deep', 'dog', 'love', 'lost'], lambda s:s[0]) >>> [(e[0],list(e[1])) for e in g] [('a', ['age', 'alone']), ('b', ['boy', 'big']), ('d', ['deep', 'dog']), ('l', ['love', 'lost'])] >>> f=ifilter(lambda x:x%2==0, range(10)) >>> list(f) [0, 2, 4, 6, 8] >>> f=ifilter(None, [[1],[1,2],,[4,5,6],,,[9]]) >>> list(f) [[1], [1, 2], [4, 5, 6], [9]] >>> f=ifilterfalse(lambda x:x%2==0, range(10)) >>> list(f) [1, 3, 5, 7, 9] >>> m=imap(lambda x:x**2, range(10)) >>> list(m) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> m=imap(lambda x,y:x*y, range(10),range(10,20)) >>> list(m) [0, 11, 24, 39, 56, 75, 96, 119, 144, 171] >>> s=islice(xrange(10), 2) >>> list(s) [0, 1] >>> s=islice(xrange(10), 2, 8, 2) >>> list(s) [2, 4, 6] >>> z=izip(xrange(10), xrange(0,20,2), xrange(0,30,3)) >>> list(z) [(0, 0, 0), (1, 2, 3), (2, 4, 6), (3, 6, 9), (4, 8, 12), (5, 10, 15), (6, 12, 18), (7, 14, 21), (8, 16, 24), (9, 18, 27)] >>> s=range(20) >>> z=izip(*[iter(s)]*3) >>> list(z) [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11), (12, 13, 14), (15, 16, 17)] >>> r=repeat('X') >>> [r.next() for x in range(10)] ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'] >>> m=starmap(lambda x:x**2, [(i,) for i in range(10)]) >>> list(m) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> m=starmap(lambda x,y:x*y, [(i,i+10) for i in range(10)]) >>> list(m) [0, 11, 24, 39, 56, 75, 96, 119, 144, 171] >>> t=takewhile(lambda x:x<5, range(10)) >>> list(t) [0, 1, 2, 3, 4] >>> x,y,z=tee(xrange(10),3) >>> list(x) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(y) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(z) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(x) ''' pass if __name__ == '__main__': import doctest doctest.testmod()