[Chicago] islice on Nested Iterators
Brian Ray
brianhray at gmail.com
Mon Jan 14 16:39:44 CET 2013
Let Adam know first so he can maintain his ranking ;)
On Mon, Jan 14, 2013 at 9:30 AM, Adam Forsyth <adam at adamforsyth.net> wrote:
> This seems like a great candidate for a follow up SO question. If you post
> it, send the link!
>
> Adam
>
>
> On Mon, Jan 14, 2013 at 6:37 AM, Oren Livne <livne at uchicago.edu> wrote:
>
>> Dear All,
>>
>> I'm trying to reuse the solution at the end of http://stackoverflow.com/*
>> *questions/470690/how-to-**automatically-generate-n-**distinct-colors<http://stackoverflow.com/questions/470690/how-to-automatically-generate-n-distinct-colors>for Python 2.7. Unfortunately, the code below never returns, since even
>> though islice() requests the first 100 iterates, it seems that the
>> inner-map calls like
>>
>> gethsvs = lambda: flatten(itertools.imap(genhsv, getfracs()))
>>
>> force getting all iterates. Instead of passing the number of iterates to
>> all lambda functions, is there a way to make an islice() call at the main
>> code, as below, but making it get only the first 100 iterates in all inner
>> maps as well?
>>
>> Thanks,
>> Oren
>>
>> ---------------------
>>
>> import colorsys, itertools, numpy as np
>> from fractions import Fraction
>>
>> def zenos_dichotomy():
>> '''
>> http://en.wikipedia.org/wiki/**1/2_%2B_1/4_%2B_1/8_%2B_1/16_%**
>> 2B_%C2%B7_%C2%B7_%C2%B7<http://en.wikipedia.org/wiki/1/2_%2B_1/4_%2B_1/8_%2B_1/16_%2B_%C2%B7_%C2%B7_%C2%B7>
>> '''
>> for k in itertools.count():
>> yield Fraction(1, 2 ** k)
>>
>> def getfracs():
>> '''
>> [Fraction(0, 1), Fraction(1, 2), Fraction(1, 4), Fraction(3, 4),
>> Fraction(1, 8), Fraction(3, 8), Fraction(5, 8), Fraction(7, 8), Fraction(1,
>> 16), Fraction(3, 16), ...]
>> [0.0, 0.5, 0.25, 0.75, 0.125, 0.375, 0.625, 0.875, 0.0625, 0.1875,
>> ...]
>> '''
>> yield 0
>> for k in zenos_dichotomy():
>> i = k.denominator # [1,2,4,8,16,...]
>> for j in range(1, i, 2):
>> yield Fraction(j, i)
>>
>> '''Can be used for the v in hsv to map linear values 0..1 to something
>> that looks equidistant.'''
>> bias = lambda x: (np.sqrt(x / 3) / Fraction(2, 3) + Fraction(1, 3)) /
>> Fraction(6, 5)
>>
>> def genhsv(h):
>> for s in [Fraction(6, 10)]: # optionally use range
>> for v in [Fraction(8, 10), Fraction(5, 10)]: # could use range too
>> yield (h, s, v) # use bias for v here if you use range
>>
>> genrgb = lambda x: colorsys.hsv_to_rgb(*x)
>> flatten = itertools.chain.from_iterable
>> gethsvs = lambda: flatten(itertools.imap(genhsv, getfracs()))
>> getrgbs = lambda: itertools.imap(genrgb, gethsvs())
>>
>> def genhtml(x):
>> uint8tuple = itertools.imap(lambda y: int(y * 255), x)
>> return 'rgb({},{},{})'.format(***uint8tuple)
>>
>> gethtmlcolors = lambda: map(genhtml, getrgbs())
>>
>> if __name__ == '__main__':
>> print(list(itertools.islice(**gethtmlcolors(), 100)))
>>
>> --
>> A person is just about as big as the things that make him angry.
>>
>> ______________________________**_________________
>> Chicago mailing list
>> Chicago at python.org
>> http://mail.python.org/**mailman/listinfo/chicago<http://mail.python.org/mailman/listinfo/chicago>
>>
>
>
> _______________________________________________
> Chicago mailing list
> Chicago at python.org
> http://mail.python.org/mailman/listinfo/chicago
>
>
--
Brian Ray
@brianray
(773) 669-7717
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20130114/26a737dc/attachment.html>
More information about the Chicago
mailing list