mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Minor updates:
* Updated comment on design of imap() * Added untraversed object in izip() structure * Replaced the pairwise() example with a more general window() example
This commit is contained in:
parent
3a8fbe7eec
commit
befa37dd05
3 changed files with 38 additions and 12 deletions
|
@ -358,10 +358,6 @@ from building blocks.
|
|||
... "Returns True if pred(x) is False for every element in the iterable"
|
||||
... return not nth(ifilter(pred, seq), 0)
|
||||
|
||||
>>> def pairwise(seq):
|
||||
... "s -> (s0,s1), (s1,s2), (s2, s3), ..."
|
||||
... return izip(seq, islice(seq,1,None))
|
||||
|
||||
>>> def padnone(seq):
|
||||
... "Returns the sequence elements and then returns None indefinitely"
|
||||
... return chain(seq, repeat(None))
|
||||
|
@ -373,4 +369,15 @@ from building blocks.
|
|||
>>> 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
|
||||
|
||||
\end{verbatim}
|
||||
|
|
|
@ -427,10 +427,6 @@ Samuele
|
|||
... "Returns True if pred(x) is False for every element in the iterable"
|
||||
... return not nth(ifilter(pred, seq), 0)
|
||||
|
||||
>>> def pairwise(seq):
|
||||
... "s -> (s0,s1), (s1,s2), (s2, s3), ..."
|
||||
... return izip(seq, islice(seq,1,len(seq)))
|
||||
|
||||
>>> def padnone(seq):
|
||||
... "Returns the sequence elements and then returns None indefinitely"
|
||||
... return chain(seq, repeat(None))
|
||||
|
@ -442,6 +438,16 @@ Samuele
|
|||
>>> 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
|
||||
|
||||
This is not part of the examples but it tests to make sure the definitions
|
||||
perform as purported.
|
||||
|
@ -473,9 +479,12 @@ True
|
|||
>>> no(lambda x: x%2==0, [1, 2, 5, 9])
|
||||
False
|
||||
|
||||
>>> list(pairwise('abc'))
|
||||
>>> list(window('abc'))
|
||||
[('a', 'b'), ('b', 'c')]
|
||||
|
||||
>>> list(window('abc',5))
|
||||
[]
|
||||
|
||||
>>> list(islice(padnone('abc'), 0, 6))
|
||||
['a', 'b', 'c', None, None, None]
|
||||
|
||||
|
|
|
@ -882,7 +882,7 @@ the following reasons:
|
|||
None.
|
||||
|
||||
4) If a need does arise, it can be met by __builtins__.map() or by
|
||||
writing a generator.
|
||||
writing: chain(iterable, repeat(None)).
|
||||
|
||||
5) Similar toolsets in Haskell and SML do not have automatic None fill-in.
|
||||
*/
|
||||
|
@ -1574,8 +1574,18 @@ izip_dealloc(izipobject *lz)
|
|||
static int
|
||||
izip_traverse(izipobject *lz, visitproc visit, void *arg)
|
||||
{
|
||||
if (lz->ittuple)
|
||||
return visit(lz->ittuple, arg);
|
||||
int err;
|
||||
|
||||
if (lz->ittuple) {
|
||||
err = visit(lz->ittuple, arg);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
if (lz->result) {
|
||||
err = visit(lz->result, arg);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue