a few extensions for the itertools
Mathias Panzenboeck
e0427417 at student.tuwien.ac.at
Mon Nov 20 03:54:41 EST 2006
Steven D'Aprano wrote:
> On Sun, 19 Nov 2006 21:35:24 +0100, Mathias Panzenboeck wrote:
>
>> I wrote a few functions which IMHO are missing in python(s itertools).
>>
>> You can download them here:
>> http://sourceforge.net/project/showfiles.php?group_id=165721&package_id=212104
>>
>> A short description to all the functions:
>>
>> icmp(iterable1, iterable2) -> integer
>> Return negative if iterable1 < iterable2,
>> zero if iterable1 == iterable1,
>> positive if iterable1 > iterable1.
>
>
> What does it mean for an iterable to be less than another iterable? That
> it has fewer items? How do these two iterables compare?
>
> iter([1, 2, None, "foo", 3+2j])
>
> def ones():
> while 1:
> yield 1
>
> Which is smaller?
>
>
it's like cmp on lists, but on iterables.
[1,2,3] < [1,2,4]
[1,2,3] < [1,2,3,0]
...
>
>> isum(iterable, start=0) -> value
>> Returns the sum of the elements of a iterable
>> plus the value of parameter 'start'. When the
>> iterable is empty, returns start.
>
>
> You mean just like the built-in sum()?
>
No, because the builtin sum can't handle iterables other than lists. Or dose it? Hmm, maby it dose
since any new version and I didn't mention it.
>>>> sum(xrange(12), 1000)
> 1066
>
>
>> iproduct(iterable, start=0) -> value
>> Returns the product of the elements of a iterable
>> times the value of parameter 'start'. When the
>> iterable is empty, returns start.
>
> If I recall, product() was requested about the same time that sum() was
> introduced, and Guido rejected it as a built-in because it was really only
> useful for calculating geometric means, and it is easy to do if you need
> it:
>
> def product(it, start=1):
> # default value of 1 is more sensible than 0
> # 1 is the multiplicative identity
> p = start
> for x in it:
> p *= x
> return p
>
>
>> forall(predicate, iterable, default=True) -> bool
>> Returns True, when for all elements x in iterable
>> predicate(x) is True. When the iterable is empty,
>> returns default.
>>
>>
>> forany(predicate, iterable, default=False) -> bool
>> Returns True, when for any element x in iterable
>> predicate(x) is True. When the iterable is empty,
>> returns default.
>
>
> I vaguely recall plans for all() and any() builtins -- perhaps for Python
> 2.5?
>
all() and any() don't get predicate functions as arguments.
>
>> take(n,iterable) -> iterator
>> returns a iterator over the first n
>> elements of the iterator
>
> Just like itertools.islice(iterable, n).
>
>>>> list(itertools.islice(xrange(10), 5))
> [0, 1, 2, 3, 4]
>
ok, ok, ok. I have overseen that.
>
>> drop(n,iterable) -> iterable
>> drops the first n elemetns of iterable and
>> return a iterator over the rest
>
> Just like itertools.islice(iterable, n, None)
>
>>>> list(itertools.islice(xrange(20), 15, None))
> [15, 16, 17, 18, 19]
>
> (Aside: I think islice would be so much cleaner if it took keyword
> arguments.)
>
>
>
>> heads(iterable) -> iterator over all heads
>> tails(iterable) -> iterator over all tails
>
> What would you use these for?
>
>
>> fcain(funct,*functs) -> function(...,***)
>> fcain(f1,f2,...,fn)(*args,*kwargs) equals f1(f2(...fn(*args,*kwargs)))
>
>
> The usual term for this is function composition.
>
>
More information about the Python-list
mailing list