Permutationen

Das folgenden Python Programm erzeugt nacheinander alle Permutationen einer gegebenen Liste. Es wird dabei einfacher Ansatz umgesetzt, bei dem zuerst eine Zahl, für die erste Position ausgewählt wird, danach von den verbleibenden eine für die Zweite usw.

#!/usr/bin/env python
########################################################################
# Copyright (c) 2006 by Bernd Breitenbach.  All Rights Reserved 
########################################################################
# perm.py
# Author: Bernd Breitenbach
#- 
# History:
#      bb - Apr 8, 2006: Created.
########################################################################

class Permutations:
    EMPTY=object()

    def __init__(self,sequence):
        self.sequence=sequence
        self.orig=list(sequence)
        self.build=[None]*len(self.sequence)
        self.level=0
        
    def calc(self):
        if self.level==len(self.orig):
            yield self.build
        else:
            for i in range(len(self.orig)):
                e=self.orig[i]
                if e==self.EMPTY: continue
                self.build[self.level]=e
                self.orig[i]=self.EMPTY
                self.level+=1
                for p in  self.calc():
                    yield p
                self.level-=1
                self.orig[i]=e
                self.build[self.level]=self.EMPTY
                



if __name__ == '__main__':
    for p in Permutations("BERND").calc():
        print p