Start New Discussion within our Software Development Community

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
...

"""

import itertools
s='workmen'
print ["".join(map(str,x)) for x in itertools.permutations(list(s),len(s))]

The article starter has earned a lot of community kudos, and such articles offer a bounty for quality replies.