Performance issue

vincent wehren vincent at visualtrans.de
Sat Apr 2 11:40:57 EST 2005


"Tom Carrick" <knyght at gmail.com> schrieb im Newsbeitrag 
news:mailman.1239.1112456748.1799.python-list at python.org...
| Hi,
|
| In my attempted learning of python, I've decided to recode an old
| anagram solving program I made in C++. The C++ version runs in less
| than a second, while the python takes 30 seconds. I'm not willing to
| think it's just python being slow, so I was hoping someone could find
| a faster way of doing this. Also, I was wondering if there was a more
| builtin, or just nicer way of converting a string to a list (or using
| the sort function on a list) than making a function for it.
|
| The words.txt here is just a copy of FreeBSD's /usr/share/dict/words
|
| Anyway, the code:
|
| import string

You're importing string, but never use it, so you can omit that line.

|
| # Need a function to convert a string to a list to be
| # able to use the sort() function
| def string2list(s):
|    l = []
|    for i in range(0, len(s)):
|        l.append(s[i])
|    return l

No need to write your own function. list(s) already does the trick.

|
| words = []
| found = []
|
| anagram = raw_input("Find anagrams of word: ")
|
| f = open('words.txt', 'r')
| file = f.read()
| f.close()


I don't have a copy of words.txt, but here's what I would try
(untested):

anagram = raw_input("Find anagrams of word: ")
sorted_anagram = list(sorted(anagram.lower()))
# If you're Python is pre 2.4 ise
# sorted_anagram = list(anagram.lower())
# sorted_anagram.sort() #--sort list in place


found = []
# assuming "words.txt" contains a word per line
# iterate over the lines of the file

for line in open("/path/to/words.txt"):
    word = line[:-1]    # Get rid of trailing newline
    sorted_word = list(sorted(word.lower()))
    if sorted_word == sorted_anagram:
        found.append(word)
if found:
    print "Anagrams of %s:" % anagram
    for w in found:
        print w
else:
    print "No anagrams for %s" % anagram


--

Vincent Wehren







More information about the Python-list mailing list