Vamos a pedir Python y itertools.permutation
!
Si 'e'
s son idénticos, se obtiene una colección de $\frac{4!}{1!2!1!}$ cadenas de caracteres:
>>> from itertools import permutations
>>> sorted(set(''.join(chars) for chars in permutations('meet')))
['eemt', 'eetm', 'emet', 'emte', 'etem', 'etme', 'meet', 'mete', 'mtee', 'teem', 'teme', 'tmee']
>>> len(set(''.join(chars) for chars in permutations('meet')))
12
Si 'e'
s se distinguen, por ejemplo, con un trazo en una 'e'
, el conjunto ha $4!$ elementos:
>>> sorted(set(''.join(chars) for chars in permutations('meɇt')))
['emtɇ', 'emɇt', 'etmɇ', 'etɇm', 'eɇmt', 'eɇtm', 'metɇ', 'meɇt', 'mteɇ', 'mtɇe', 'mɇet', 'mɇte', 'temɇ', 'teɇm', 'tmeɇ', 'tmɇe', 'tɇem', 'tɇme', 'ɇemt', 'ɇetm', 'ɇmet', 'ɇmte', 'ɇtem', 'ɇtme']
>>> len(set(''.join(chars) for chars in permutations('meɇt')))
24
En lugar de generar cada permutación y el filtrado de los duplicados, también es posible generar la lista directamente sin ningún duplicado. He aquí un ejemplo.
Genera $\frac{10!}{9!}$ ($=10$) las cadenas sin tener que generar $10!$ cadenas y la eliminación de $10*(9!-1)$ duplicados:
>>> [''.join(chars) for chars in perm_unique('aaaaaaaaab')]
['baaaaaaaaa', 'abaaaaaaaa', 'aabaaaaaaa', 'aaabaaaaaa', 'aaaabaaaaa', 'aaaaabaaaa', 'aaaaaabaaa', 'aaaaaaabaa', 'aaaaaaaaba', 'aaaaaaaaab']
>>> len(list(permutations('aaaaaaaaab')))
3628800