multirember&co
attn.steven.kuo at gmail.com
attn.steven.kuo at gmail.com
Thu Apr 19 15:16:51 EDT 2007
On Apr 19, 9:13 am, Anton Vredegoor <anton.vredeg... at gmail.com> wrote:
(snipped)
>
> > How about this one?
>
> No that can result in an infinite loop after yet another
>
> print it1.next()
>
> This one however ...
>
> from collections import deque
>
> class sentinel(object):
> pass
>
> class myiter(object):
>
> def __init__(self,seq):
> self.seq = seq
> self.index = -1
>
> def __iter__(self):
> return self
>
> def next(self):
> self.index +=1
> if self.index < len(self.seq):
> return self.seq[self.index]
> else:
> return sentinel
>
> def xsplitter(seq, pred):
> Q = deque(),deque()
> it = myiter(seq)
> def gen(p):
> for x in it:
> while Q[p]: yield Q[p].popleft()
> if x is sentinel: break
> if pred(x) == p: yield x
> else:
> Q[~p].append(x)
> for x in gen(p): yield x
> return gen(1),gen(0)
>
> def test():
> L = 'a', 1, 2, 'a'
> it1, it2 = xsplitter(L, lambda x: x == 'a')
> print it1.next()
> print it2.next()
> print it1.next()
> print it2.next()
>
> if __name__=='__main__':
> test()
>
> A.
Um, no. That one stops prematurely if
your input sequence is:
L = 1, 2, 3, 'a', 'a'
You get points for persistence, however. :)
--
Regards,
Steven
More information about the Python-list
mailing list