[Python-checkins] r65150 - in python/trunk: Doc/library/itertools.rst Lib/test/test_itertools.py
raymond.hettinger
python-checkins at python.org
Sun Jul 20 01:58:47 CEST 2008
Author: raymond.hettinger
Date: Sun Jul 20 01:58:47 2008
New Revision: 65150
Log:
Clean-up itertools docs and recipes.
Modified:
python/trunk/Doc/library/itertools.rst
python/trunk/Lib/test/test_itertools.py
Modified: python/trunk/Doc/library/itertools.rst
==============================================================================
--- python/trunk/Doc/library/itertools.rst (original)
+++ python/trunk/Doc/library/itertools.rst Sun Jul 20 01:58:47 2008
@@ -35,18 +35,11 @@
Likewise, the functional tools are designed to work well with the high-speed
functions provided by the :mod:`operator` module.
-The module author welcomes suggestions for other basic building blocks to be
-added to future versions of the module.
-
Whether cast in pure python form or compiled code, tools that use iterators are
-more memory efficient (and faster) than their list based counterparts. Adopting
+more memory efficient (and often faster) than their list based counterparts. Adopting
the principles of just-in-time manufacturing, they create data when and where
needed instead of consuming memory with the computer equivalent of "inventory".
-The performance advantage of iterators becomes more acute as the number of
-elements increases -- at some point, lists grow large enough to severely impact
-memory cache performance and start running slowly.
-
.. seealso::
@@ -598,55 +591,35 @@
.. testcode::
- def take(n, seq):
- return list(islice(seq, n))
+ def take(n, iterable):
+ "Return first n items of the iterable as a list"
+ return list(islice(iterable, n))
- def enumerate(iterable):
- return izip(count(), iterable)
+ def enumerate(iterable, start=0):
+ return izip(count(start), iterable)
- def tabulate(function):
+ def tabulate(function, start=0):
"Return function(0), function(1), ..."
- return imap(function, count())
-
- def iteritems(mapping):
- return izip(mapping.iterkeys(), mapping.itervalues())
+ return imap(function, count(start))
def nth(iterable, n):
- "Returns the nth item or raise StopIteration"
- return islice(iterable, n, None).next()
+ "Returns the nth item or empty list"
+ return list(islice(iterable, n, n+1))
- def all(seq, pred=None):
- "Returns True if pred(x) is true for every element in the iterable"
- for elem in ifilterfalse(pred, seq):
- return False
- return True
-
- def any(seq, pred=None):
- "Returns True if pred(x) is true for at least one element in the iterable"
- for elem in ifilter(pred, seq):
- return True
- return False
-
- def no(seq, pred=None):
- "Returns True if pred(x) is false for every element in the iterable"
- for elem in ifilter(pred, seq):
- return False
- return True
-
- def quantify(seq, pred=None):
- "Count how many times the predicate is true in the sequence"
- return sum(imap(pred, seq))
+ def quantify(iterable, pred=bool):
+ "Count how many times the predicate is true"
+ return sum(imap(pred, iterable))
- def padnone(seq):
+ def padnone(iterable):
"""Returns the sequence elements and then returns None indefinitely.
Useful for emulating the behavior of the built-in map() function.
"""
- return chain(seq, repeat(None))
+ return chain(iterable, repeat(None))
- def ncycles(seq, n):
+ def ncycles(iterable, n):
"Returns the sequence elements n times"
- return chain.from_iterable(repeat(seq, n))
+ return chain.from_iterable(repeat(iterable, n))
def dotproduct(vec1, vec2):
return sum(imap(operator.mul, vec1, vec2))
Modified: python/trunk/Lib/test/test_itertools.py
==============================================================================
--- python/trunk/Lib/test/test_itertools.py (original)
+++ python/trunk/Lib/test/test_itertools.py Sun Jul 20 01:58:47 2008
@@ -1185,52 +1185,32 @@
[22]
[25, 26, 27, 28]
->>> def take(n, seq):
-... return list(islice(seq, n))
+>>> def take(n, iterable):
+... "Return first n items of the iterable as a list"
+... return list(islice(iterable, n))
->>> def enumerate(iterable):
-... return izip(count(), iterable)
+>>> def enumerate(iterable, start=0):
+... return izip(count(start), iterable)
->>> def tabulate(function):
+>>> def tabulate(function, start=0):
... "Return function(0), function(1), ..."
-... return imap(function, count())
-
->>> def iteritems(mapping):
-... return izip(mapping.iterkeys(), mapping.itervalues())
+... return imap(function, count(start))
>>> def nth(iterable, n):
-... "Returns the nth item"
+... "Returns the nth item or empty list"
... return list(islice(iterable, n, n+1))
->>> def all(seq, pred=None):
-... "Returns True if pred(x) is true for every element in the iterable"
-... for elem in ifilterfalse(pred, seq):
-... return False
-... return True
-
->>> def any(seq, pred=None):
-... "Returns True if pred(x) is true for at least one element in the iterable"
-... for elem in ifilter(pred, seq):
-... return True
-... return False
-
->>> def no(seq, pred=None):
-... "Returns True if pred(x) is false for every element in the iterable"
-... for elem in ifilter(pred, seq):
-... return False
-... return True
-
->>> def quantify(seq, pred=None):
-... "Count how many times the predicate is true in the sequence"
-... return sum(imap(pred, seq))
+>>> def quantify(iterable, pred=bool):
+... "Count how many times the predicate is true"
+... return sum(imap(pred, iterable))
->>> def padnone(seq):
+>>> def padnone(iterable):
... "Returns the sequence elements and then returns None indefinitely"
-... return chain(seq, repeat(None))
+... return chain(iterable, repeat(None))
->>> def ncycles(seq, n):
-... "Returns the sequence elements n times"
-... return chain(*repeat(seq, n))
+>>> def ncycles(iterable, n):
+... "Returns the seqeuence elements n times"
+... return chain(*repeat(iterable, n))
>>> def dotproduct(vec1, vec2):
... return sum(imap(operator.mul, vec1, vec2))
@@ -1315,24 +1295,6 @@
>>> nth('abcde', 3)
['d']
->>> all([2, 4, 6, 8], lambda x: x%2==0)
-True
-
->>> all([2, 3, 6, 8], lambda x: x%2==0)
-False
-
->>> any([2, 4, 6, 8], lambda x: x%2==0)
-True
-
->>> any([1, 3, 5, 9], lambda x: x%2==0,)
-False
-
->>> no([1, 3, 5, 9], lambda x: x%2==0)
-True
-
->>> no([1, 2, 5, 9], lambda x: x%2==0)
-False
-
>>> quantify(xrange(99), lambda x: x%2==0)
50
More information about the Python-checkins
mailing list