"Tom Carrick" <[EMAIL PROTECTED]> schrieb im Newsbeitrag news:[EMAIL PROTECTED] | 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 -- http://mail.python.org/mailman/listinfo/python-list