Commit 9e386419 authored by Raymond Hettinger's avatar Raymond Hettinger

Make the derived tools amendable to cut and paste.

parent 9bd308f6
...@@ -328,59 +328,59 @@ included here to illustrate how higher level tools can be created ...@@ -328,59 +328,59 @@ included here to illustrate how higher level tools can be created
from building blocks. from building blocks.
\begin{verbatim} \begin{verbatim}
>>> def enumerate(iterable): def enumerate(iterable):
... return izip(count(), iterable) return izip(count(), iterable)
>>> def tabulate(function): def tabulate(function):
... "Return function(0), function(1), ..." "Return function(0), function(1), ..."
... return imap(function, count()) return imap(function, count())
>>> def iteritems(mapping): def iteritems(mapping):
... return izip(mapping.iterkeys(), mapping.itervalues()) return izip(mapping.iterkeys(), mapping.itervalues())
>>> def nth(iterable, n): def nth(iterable, n):
... "Returns the nth item" "Returns the nth item"
... return list(islice(iterable, n, n+1)) return list(islice(iterable, n, n+1))
>>> def all(pred, seq): def all(pred, seq):
... "Returns True if pred(x) is True for every element in the iterable" "Returns True if pred(x) is True for every element in the iterable"
... return False not in imap(pred, seq) return False not in imap(pred, seq)
>>> def some(pred, seq): def some(pred, seq):
... "Returns True if pred(x) is True at least one element in the iterable" "Returns True if pred(x) is True at least one element in the iterable"
... return True in imap(pred, seq) return True in imap(pred, seq)
>>> def no(pred, seq): def no(pred, seq):
... "Returns True if pred(x) is False for every element in the iterable" "Returns True if pred(x) is False for every element in the iterable"
... return True not in imap(pred, seq) return True not in imap(pred, seq)
>>> def quantify(pred, seq): def quantify(pred, seq):
... "Count how many times the predicate is True in the sequence" "Count how many times the predicate is True in the sequence"
... return sum(imap(pred, seq)) return sum(imap(pred, seq))
>>> def padnone(seq): def padnone(seq):
... "Returns the sequence elements and then returns None indefinitely" "Returns the sequence elements and then returns None indefinitely"
... return chain(seq, repeat(None)) return chain(seq, repeat(None))
>>> def ncycles(seq, n): def ncycles(seq, n):
... "Returns the sequence elements n times" "Returns the sequence elements n times"
... return chain(*repeat(seq, n)) return chain(*repeat(seq, n))
>>> def dotproduct(vec1, vec2): def dotproduct(vec1, vec2):
... return sum(imap(operator.mul, vec1, vec2)) return sum(imap(operator.mul, vec1, vec2))
>>> def window(seq, n=2): def window(seq, n=2):
... "Returns a sliding window (of width n) over data from the iterable" "Returns a sliding window (of width n) over data from the iterable"
... " s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... " " s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
... it = iter(seq) it = iter(seq)
... result = tuple(islice(it, n)) result = tuple(islice(it, n))
... if len(result) == n: if len(result) == n:
... yield result yield result
... for elem in it: for elem in it:
... result = result[1:] + (elem,) result = result[1:] + (elem,)
... yield result yield result
>>> def take(n, seq): def take(n, seq):
... return list(islice(seq, n)) return list(islice(seq, n))
\end{verbatim} \end{verbatim}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment