String Splitter Brain Teaser

Michael Spencer mahs at telcopartners.com
Mon Mar 28 19:18:38 CEST 2005


Bill Mill wrote:

> for very long genomes he might want a generator:
> 
> def xgen(s):
>     l = len(s) - 1
>     e = enumerate(s)
>     for i,c in e:
>         if i < l and s[i+1] == '/':
>             e.next()
>             i2, c2 = e.next()
>             yield [c, c2]
>         else:
>             yield [c]
> 
> 
>>>>for g in xgen('ATT/GATA/G'): print g
> 
> ...
> ['A']
> ['T']
> ['T', 'G']
> ['A']
> ['T']
> ['A', 'G']
> 
> Peace
> Bill Mill
> bill.mill at gmail.com

works according to the original spec, but there are a couple of issues:

1. the output is specified to be a list, so delaying the creation of the list 
isn't a win

2. this version fails down in the presence of "double degeneracies" (if that's 
what they should be called) - which were not in the OP spec, but which cropped 
up in a later post :
  >>> list(xgen("AGC/C/TGA/T"))
  [['A'], ['G'], ['C', 'C'], ['/'], ['T'], ['G'], ['A', 'T']]

Michael




More information about the Python-list mailing list