[Tutor] How to improve

taserian taserian at gmail.com
Mon Jul 16 15:26:29 CEST 2007


Thank you both, Alan and Gregor. Sorry I didn't reply earlier; just a bit
overwhelmed with a family situation over here.

Alan, looks like I'll have to go over list comprehension as a way to
initialize variables. I recall when I first started programming this, I
tried wordlist = [] * 31, completely overlooking the fact that all of the
list were in fact the same, and when debugging finding that my wordlist had
been copied 31 times!

Gregor, I like your version since you don't have to constrain the list
artificially, as I did. For this problem in particular, the longest
interlaced word I could find was 11 characters long, and the longer you go,
the less probable it is that you'll find one. 31 seemed like a good enough
value, but I'll probably change my version to look like yours.

Thanks again, guys!

Tony R.

On 7/12/07, Gregor Lingl <glingl at aon.at> wrote:
>
> taserian schrieb:
> > I've been programming for years before encountering Pythoin, but in
> > much more verbose languages, and I appreciate the fact that Python is
> > so terse and still accomplishes so much. Still, I have difficulty
> > thinking in Python, and tend to revert to longer programs for what
> > seems to be simple tasks. Sometimes it's because I'm just not aware of
> > a library function, but many times it's because there's just some
> > elegant way to solve my kludge.
> >
> > As an exercise in Python, I decided to solve a toy problem called
> > "interleave". The idea is that I want to determine how many words in
> > the English language are decomposable into two words by taking it
> > apart one letter at a time. So the word "theorems" could be decomposed
> > into "term" and "hoes" (original word = abababab, decomposed words =
> > aaaa and bbbb, with all letters in the same order as in the original
> > word).
> >
> > I'd like to see how I could improve the program below for this, and
> > make it more Python-ish.
> >
> Hi taserian,
>
> I've just produced an alternative solution of your problem
> (based on your ideas). The main difference is, that I use
> a wordlength-dictionary. This version has the advantage, that
> it doesn't make an assumption about the max word length.
> I don't consider it to be an improvement, just an example
> that uses different language elements of Python in some places.
> Hope you enjoy it.
>
> ==== START
>
> wordlengthdict = {}
>
> for word in open("wordlist.txt").read().split():
>     wordlengthdict.setdefault(len(word),[]).append(word)
>
> outfile = open('InterleaveEnglishYAWL.txt', 'w')
>
> for l in sorted(wordlengthdict.keys()):
>     print l
>     for w in wordlengthdict[l]:
>         wordtriple = (w1, w2, dummy)  = w[0::2], w[1::2], w
>         if  w1 in wordlengthdict.get(len(w1),[]) and w2 in
> wordlengthdict.get(len(w2),[]):
>             outfile.write("(%s, %s, %s)\n" % wordtriple)
>             print wordtriple
>
> outfile.close();
>
> ==== END
>
> Best regards,
> Gregor
>
> > = = = = START
> >
> > def decompose(longword):
> >     word1 = longword[0::2]
> >     word2 = longword[1::2]
> >     return (word1, word2)
> >
> > wordlengthlist = [None] * 31
> > for i in range(0,len(wordlengthlist)):
> >     wordlengthlist[i] = []
> > results = []
> >
> > for lineread in open("word.list"):
> >     for word in lineread.split():
> >         if len(word)<31:
> >             wordlengthlist[len(word)].append(word)
> >
> > outfile = open('InterleaveEnglishYAWL.txt', 'w')
> >
> > for x in range(4, 31):
> >     print x
> >     for i in wordlengthlist[x]:
> >         twowords = decompose(i)
> >         word1 = twowords[0]
> >         word2 = twowords[1]
> >         if     word1 in wordlengthlist[len(word1)] and word2 in
> > wordlengthlist[len(word2)]:
> >             outfile.write("(" + word1 + ", " + word2 + ", " + i + ")\n")
> >             print (word1, word2, i)
> >
> > outfile.close();
> >
> > = = = = END
> >
> > Tony R.
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20070716/0af62b1e/attachment.html 


More information about the Tutor mailing list