/ / Python: produce una lista específica de permutaciones con un patrón específico (agregue a itertools) - python, lista, matemáticas, permutación, itertools

Python: produce una lista específica de permutaciones con un patrón específico (agregue a itertools) - python, lista, matemáticas, permutación, itertools

Estoy tratando de encontrar una manera de escribir un script de Python en el que pueda producir un archivo que contenga una lista de entradas (cadenas) que son permutaciones de entradas específicas. Para elaborar:

Imagina que tienes 9 dígitos en una cadena. Pero el único valor posible en cada dígito está dentro del rango de 0123456789. Así que quiero todas las permutaciones de 0123456789 sobre 9 dígitos ... y una lista de cadenas de todas esas permutaciones (es decir, 1,000,000,000 de permutaciones posibles).

Lo suficientemente simple como para usar itertools.permutations ¿verdad? No. Según la documentación oficial:

def permutations(iterable, r=None):
# permutations("ABCD", 2) --> AB AC AD BA BC BD CA CB CD DA DB DC

Si miras de cerca los resultados no haySe repite ... así que no hay instancias de decir AA o BB. Eso significa que si trato de ejecutar todas las permutaciones de 0123456789 en 9 dígitos no obtendré las combinaciones "11111111" o "111222333". Es decir, no obtendré mis 1 mil millones de resultados, ¿verdad?

¿Estoy entendiendo mal el módulo de itertools aquí? ¿Qué puedo hacer para crear un archivo con una lista de cadenas de todas las permutaciones posibles de "0123456789" sobre 9 dígitos?

Respuestas

4 para la respuesta № 1

En términos matemáticos normales, "AA" es no un permutación de "ABCD". Quizás esté buscando un producto cartesiano en su lugar, y itertools apoya eso, también. P.ej:

>>> for x in it.product("ABC", repeat=len("ABC")): print(x)
("A", "A", "A")
("A", "A", "B")
("A", "A", "C")
("A", "B", "A")
("A", "B", "B")
("A", "B", "C")
("A", "C", "A")
("A", "C", "B")
("A", "C", "C")
("B", "A", "A")
("B", "A", "B")
("B", "A", "C")
("B", "B", "A")
("B", "B", "B")
("B", "B", "C")
("B", "C", "A")
("B", "C", "B")
("B", "C", "C")
("C", "A", "A")
("C", "A", "B")
("C", "A", "C")
("C", "B", "A")
("C", "B", "B")
("C", "B", "C")
("C", "C", "A")
("C", "C", "B")
("C", "C", "C")

Tenga en cuenta que estos definitivamente no son permutaciones -el número de permutaciones de 3 elementos es 3 factorial, es decir, 6, mientras que el número de estos elementos en el producto cartesiano de 3 copias de la secuencia de 3 elementos es 3 a la tercera potencia, también conocido como 81. ¡Una gran diferencia! -)


0 para la respuesta № 2

Para cualquier persona que busque algo similar, este es el código que escribí. Funciona bien.

import itertools

print ("")
characters = input("Characters to include: ")
length = input("Length of each combination: ")
filename = input("Name of list file: ")
print ("")

length = int(length)

f1 = open(filename, "w")
for p in itertools.product(characters,repeat=length):
f1.write("".join(str(x) for x in p) + "n")
f1.close()