es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descubre todas las posibles permutaciones de 3 números en N espacios [Python]

Entonces, necesito encontrar una forma de obtener todas las permutaciones de 3 números, concretamente 1, 0 y -1, cuando hay N espacios.

Entonces, en el caso de que haya 2 espacios (N=2), la función devolvería:

[
    [1,1],
    [1,0],
    [0,1],
    [0,0],
    [-1,0],
    [0,-1],
    [-1,-1],
    [1,-1],
    [-1,1]
]

De manera similar, si N = 3, tendríamos un resultado bastante más largo, así que no lo voy a escribir aquí.

Sinceramente, no estoy seguro de cómo escribir una función que logre esto. Si alguien tiene alguna sugerencia, estaría muy abierto a escucharla.

Es importante destacar: itertools.permutations no funciona en este caso, ya que si supero los 3 espacios simplemente no devuelve nada. Necesito encontrar una solución que funcione cuando hay hasta 10 espacios.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es utilizando itertools.product() para generar todas las combinaciones posibles de los 3 números repetidos N veces, y luego filtrar las inválidas. Aquí hay una implementación de ejemplo:

    import itertools
    
    def generar_permutaciones(n):
        # generamos todas las combinaciones posibles de 1, 0, -1 repetidos n veces
        perms = itertools.product([1, 0, -1], repeat=n)
    
        # filtramos las permutaciones que no tienen exactamente n elementos
        perms = filter(lambda x: len(x) == n, perms)
    
        # filtramos las permutaciones que no tienen exactamente uno de cada número
        perms = filter(lambda x: x.count(1) == 1 and x.count(0) == 1 and x.count(-1) == 1, perms)
    
        # convertimos las permutaciones a una lista de listas
        perms = [list(p) for p in perms]
    
        return perms
    

    Esta función debería retornar los resultados deseados para cualquier valor de N entre 1 y 10. Sin embargo, debes tener en cuenta que la cantidad de permutaciones crece exponencialmente con N, por lo que generar todas las permutaciones para valores grandes de N puede llevar mucho tiempo o agotar la memoria. En ese caso, es posible que necesites modificar las condiciones de filtrado para reducir la cantidad de permutaciones válidas.

Comments are closed.