Because of their demand only nature, generators are ideal for finding the combinations of larger sequences. This code applies a Python generator to find the combinations of the sequence. Since permutations are a special case of combinations for all the items in a sequence, I have expanded the result to give the permutations of a string.
# using a combinations-generator for larger permutations # tested with Python24 by vegaseat 10sep2006 def xcombinations(items, n): if n == 0: yield  else: for i in xrange(len(items)): for cc in xcombinations(items[:i] + items[i+1:], n-1): yield [items[i]] + cc def xpermutations(items): """permutations are just a special case of combinations""" return xcombinations(items, len(items)) # test the above functions ... if __name__=="__main__": word = 'workmen' charList = list(word) # ['w', 'o', 'r', 'k', 'm', 'e', 'n'] print "Permutations of '%s' -->" % word for pm in xpermutations(charList): # reform the word print ''.join(pm) """ Permutations of 'workmen' --> workmen workmne workemn workenm worknme worknem wormken wormkne wormekn wormenk wormnke ... """
About the Author