which one do you prefer? python with C# or java?

Alexander Blinne news at blinne.net
Mon Jun 11 19:23:57 CEST 2012


On 10.06.2012 23:27, Paul Rubin wrote:
> Here is an exercise from the book that you might like to try in Python:
> 
>   http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_idx_3894
> 
> It's not easy ;-)

I liked this exercize. At first I wrote my own merger.

> def merge(*iterables):
>     iterables = list(iterables)
>     current = [i.next() for i in iterables]
>     last = None
>     while True:
>         m = min(current)
>         while last == m:
>             p = current.index(m)
>             try:
>                 current[p] = iterables[p].next()
>             except StopIteration:
>                 del current[p]
>                 del iterables[p]
>             if len(current) == 0:
>                 raise StopIteration
>             m = min(current)    
>         yield m
>         last = m

But then I realised the vast library of python already contained (a
faster) one (propably based upon
<http://code.activestate.com/recipes/491285-iterator-merge/>), which
just needed to be enhanced a little bit to allow duplicate items to be
removed:

> import heapq
> 
> def skipdups(m):
>     l = k = m.next()
>     yield k
>     while True:
>         while l == k:
>             k = m.next()
>         yield k
>         l = k
> 
> def gen_s():
>   s = [1]
>   m = skipdups(heapq.merge(*[(lambda j: (k*j for k in s))(n) for n in [2,3,5]]))
>   yield s[0]
>   while True:
>       k = m.next()
>       s.append(k)
>       yield k

Now gen_s() generates the wanted sequence.

Greetings


More information about the Python-list mailing list