以下に各ツールの一般的な使い方と、ツールの組み合わせの例を示します。
>>> amounts = [120.15, 764.05, 823.14] >>> for checknum, amount in izip(count(1200), amounts): ... print 'Check %d is for $%.2f' % (checknum, amount) ... Check 1200 is for $120.15 Check 1201 is for $764.05 Check 1202 is for $823.14 >>> import operator >>> for cube in imap(operator.pow, xrange(1,4), repeat(3)): ... print cube ... 1 8 27 >>> reportlines = ['EuroPython', 'Roster', '', 'alex', '', 'laura', '', 'martin', '', 'walter', '', 'samuele'] >>> for name in islice(reportlines, 3, None, 2): ... print name.title() ... Alex Laura Martin Walter Samuele
この節では、itertools を組み合わせてより強力な itertools を作り出す enumerate()とiteritems()の非常に効率的な実装はPython に含まれていますが、ここでは高レベルなツールを基本的な部品から作成する例 として取り上げています。
def take(n, seq): return list(islice(seq, n)) def enumerate(iterable): return izip(count(), iterable) def tabulate(function): "Return function(0), function(1), ..." return imap(function, count()) def iteritems(mapping): return izip(mapping.iterkeys(), mapping.itervalues()) def nth(iterable, n): "Returns the nth item" return list(islice(iterable, n, n+1)) def all(seq, pred=bool): "Returns True if pred(x) is True for every element in the iterable" return False not in imap(pred, seq) def any(seq, pred=bool): "Returns True if pred(x) is True at least one element in the iterable" return True in imap(pred, seq) def no(seq, pred=bool): "Returns True if pred(x) is False for every element in the iterable" return True not in imap(pred, seq) def quantify(seq, pred=bool): "Count how many times the predicate is True in the sequence" return sum(imap(pred, seq)) def padnone(seq): "Returns the sequence elements and then returns None indefinitely" return chain(seq, repeat(None)) def ncycles(seq, n): "Returns the sequence elements n times" return chain(*repeat(seq, n)) def dotproduct(vec1, vec2): return sum(imap(operator.mul, vec1, vec2)) def window(seq, n=2): "Returns a sliding window (of width n) over data from the iterable" " s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... " it = iter(seq) result = tuple(islice(it, n)) if len(result) == n: yield result for elem in it: result = result[1:] + (elem,) yield result def tee(iterable): "Return two independent iterators from a single iterable" def gen(next, data={}, cnt=[0]): dpop = data.pop for i in count(): if i == cnt[0]: item = data[i] = next() cnt[0] += 1 else: item = dpop(i) yield item next = iter(iterable).next return (gen(next), gen(next))