Ich habe den offensichtlichen Unterschied zwischen zwei Funktionen unten nicht gefunden. Die Frage ist also, wie die zweite Funktion doppelte Zeichen vergleicht und entfernt.welcher Code die doppelte Kombination in Permutation entfernen
Permutation für Nicht-Duplikat Zeichen
def perms(s):
if(len(s)==1): return [s]
result=[]
for i,v in enumerate(s):
result += [v+p for p in perms(s[:i]+s[i+1:])]
return result
perms('abc')
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
Permutation für doppelte Zeichen
def permutations(string):
result = set([string])
if len(string) == 2:
result.add(string[1] + string[0])
elif len(string) > 2:
for i, c in enumerate(string):
for s in permutations(string[:i] + string[i + 1:]):
result.add(c + s)
return list(result)
permutations('aabb');
['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']
EDIT:
Die Funktion unterschiedliche Ergebnisse zurückgeben, wenn die Eingangs Duplikate enthält:
>>> permutations('aabb')
['abab', 'baba', 'bbaa', 'abba', 'aabb', 'baab']
>>> perms('aabb')
['aabb', 'aabb', 'abab', 'abba', 'abab', 'abba', 'aabb', 'aabb', 'abab',
'abba', 'abab', 'abba', 'baab', 'baba', 'baab', 'baba', 'bbaa', 'bbaa',
'baab', 'baba', 'baab', 'baba', 'bbaa', 'bbaa']
Groß ! Das hilft mir sehr! Vielen Dank! –