# [Tutor] More Pythonesque or a more efficient method

Emile van Sebille emile at fenx.com
Wed Oct 8 00:58:12 CEST 2008

```Robert Berman wrote:
> Hi,
>
> The below script which prints anagrams available for any word available
> within a given database. It does work, but  it is not very fast. I am
> relatively certain there are more Python friendly coding techniques but
> I am more concerned with a faster algorithm.

You might consider looking up the permutations only (up to some length
-- there are a lot of permutations for 8+ letter words :)

#from http://www.daniweb.com/code/snippet459.html

def permutate(seq):
"""permutate a sequence and return a list of the permutations"""
if not seq:
return [seq]  # is an empty sequence
else:
temp = []
for k in range(len(seq)):
part = seq[:k] + seq[k+1:]
#print k, part  # test
for m in permutate(part):
temp.append(seq[k:k+1] + m)
#print m, seq[k:k+1], temp  # test
return temp

print permutate('myth')

['myth', 'myht', 'mtyh', 'mthy', 'mhyt', 'mhty', 'ymth', 'ymht', 'ytmh',
'ythm', 'yhmt', 'yhtm', 'tmyh', 'tmhy', 'tymh', 'tyhm', 'thmy', 'thym',
'hmyt', 'hmty', 'hymt', 'hytm', 'htmy', 'htym']

>>> print len(permutate('mythsdfw'))
40320
>>> print len(permutate('mythsdf'))
5040
>>> print len(permutate('mythsd'))
720
>>> print len(permutate('myths'))
120
>>> print len(permutate('myth'))
24
>>> print len(permutate('myt'))
6

so something like:

print [ xx for xx in permutate('myths') if xx in worddict ]

HTH,

Emile

```