Looping through the gmail dot trick

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sun Jan 20 15:14:39 EST 2008


En Sun, 20 Jan 2008 14:38:06 -0200, Joshua Gilman <joshuagilman at gmail.com>  
escribi�:

> My task is this: Loop through an email and create as many combinations of
> periods as possible. So all the combinations for blah would be:
>
> b.lah
> bl.ah
> bla.h
> b.l.ah
> b.la.h
> bl.a.h

I'd use a recursive generator (the divide-and-conquer approach):

def genalldots(txt):
   if len(txt)<=1:
     yield txt
   else:
     head, tail = txt[0], txt[1:]
     for item in genalldots(tail):
         yield head+item
         yield head+'.'+item

print sorted(genalldots('blah'))

(I got your six spellings above, plus 'blah' and 'b.l.a.h')

> I'm still rather new to python so this is turning out to be rather  
> tricky.
> My current code is as follows:
>
> for d in range(1, len(email)):
>>     for i in range(1, len(email)):
>>         y = i
>>         temail = email
>>         for x in range(d):
>>             if email[y] == '.': break
>>             temail = temail.replace(email[y], '.' + email[y])
>>             if not y > len(email) - 2: y += 1
>>         print temail

The replace function is dangerous, in case a letter appears more than  
once, you are replacing all instances. Anyway, since you *know* you want  
to replace the y-th item, just do:
temail = temail[:y] + '.' + temail[y:]

-- 
Gabriel Genellina




More information about the Python-list mailing list