Greetings: I'm trying to improve my programming and Python
skills. To that end I have implemented a word jumble program as a
recursive function: given a string of arbitrary length, return a list of
all permutations of the string each character exactly once. In other
words: permute('t') = ['t'],
permute('te') = ['te',
'et'], permute('tes') = ['tes',
'tse', 'ets', 'est', 'ste', 'set'],
etc. Here is my first try, the brute force method: >>>>def permute1 (word): >>>> retList=[] >>>> if len(word) ==
1: >>>>
# There is only one possible permutation >>>>
retList.append(word) >>>> else: >>>>
# Return a list of all permutations using all characters >>>>
for pos in range(len(word)): >>>>
# First isolate the char that goes in the first spot >>>>
firstChar=word[pos] >>>>
# Then assemble the rest of the word >>>>
restWord=word[0:pos]+word[pos+1:len(word)] >>>>
# Get the permutations of the rest of the word >>>> restList=permute1(restWord) >>>>
# Now, tack the first char onto each word in the list >>>>
for item in restList: >>>>
newWord=firstChar+item >>>>
# and add it to the output >>>>
retList.append(newWord) >>>> return retList My second version combines statements to remove intermediate
variables: >>>>def permute2 (word): >>>> retList=[] >>>> if len(word) ==
1: >>>>
# There is only one possible permutation >>>>
retList.append(word) >>>> else: >>>>
# Return a list of all permutations using all characters >>>>
for pos in range(len(word)): >>>>
# Get the
permutations of the rest of the word >>>>
permuteList=permute2(word[0:pos]+word[pos+1:len(word)]) >>>>
# Now, tack the first char onto each word in the list >>>>
# and add it to the output >>>>
for item in permuteList: >>>>
retList.append(word[pos]+item) >>>> return retList I'm told that I can collapse the logic further by
using a list comprehension, something like: >>>>def permute3 (word): >>>> retList=[] >>>> if len(word) ==
1: >>>>
# There is only one possible permutation >>>>
retList.append(word) >>>> else: >>>>
# Return a list of all permutations using all characters >>>>
retlist = [a list comprehension that calls permute3] >>>> return retList Unfortunately, I don't understand how list
comprehensions work and how to implement them. Can someone point me in
the right direction, please. Thanks in advance for your help. I'm learning a
lot by following this list. Barry |
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor