Dick, et al:

> -----Original Message-----
> Date: Tue, 28 Nov 2006 12:57:51 -0800
> From: Dick Moores <[EMAIL PROTECTED]>
> Subject: Re: [Tutor] How to generate permutations of a given string
> To: Python Tutor List <tutor@python.org>
> Message-ID: <[EMAIL PROTECTED]>
> Content-Type: text/plain; charset="us-ascii"; format=flowed
> 
> At 02:49 PM 11/27/2006, John Fouhy wrote:
> >On 28/11/06, Carroll, Barry <[EMAIL PROTECTED]> wrote:
> > > I'm not sure these qualify as "simple", but they work.  This was
one
> of
> > > my very first projects in Python, so it may be more complicated
than
> > > necessary.
> >
> >This is an alternative approach:
> >http://mail.python.org/pipermail/tutor/2005-May/038059.html
> 
> However, this is not what someone looking for an anagram algorithm
> would find useful, it seems to me.
> 
> Barry Carroll offering does the job, if the last line is revised as
> shown below:
> 
> def permute(word):
>          """
>          By Barry Carrol <[EMAIL PROTECTED]>
>          on Tutor list, revised (last line) by me.
>          """
>          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=permute(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
>          return list(set(retList)) # make elements of retList unique
> 
> (The line in the code in Barry's post,
> "permuteList=permute2(word[0:pos]+word[pos+1:len(word)])", was
> corrected to "permuteList=permute(word[0:pos]+word[pos+1:len(word)])"
> in an email from him to me.)
> (i.e., permute2 changed to permute)
> 
> Dick Moores
In the intrest of reusability, I would recommend leaving permute as it
is and calling it from another function:

#####
>>>>> def permuteset(word):
>>>>>     return list(set(permute(word)))

>>>>> permute("121")
>>>>> ['121', '112', '211', '211', '112', '121']

>>>>> permuteset("121")
>>>>> ['121', '211', '112']
#####

If you're sure you will never want to use the permute function in any
other way, then it doesn't matter, of course.  Otherwise, it's nice to
have the original function intact, in case you ever want a list of all
the combinations that ARE duplicates, for example ;*)

FWIW.

Regards,

Barry

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to