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.

¿Cómo puedo modificar mi programa para que devuelva el mismo resultado si se ingresa un solo número?

Entonces, estoy tratando de crear un programa para encontrar todas las permutaciones de cada número dentro de 1 a n

Por ejemplo, si n = 5, básicamente debemos encontrar las permutaciones para [1, 2, 3, 4, 5] y por ejemplo, si n = 3, debemos encontrar las permutaciones para [1, 2, 3]. La salida debe ser devuelta como una tupla.

Así que ahora tengo este código que devuelve las permutaciones solo si la entrada es una lista y funciona … pero ¿cómo puedo modificarlo para devolver todas las permutaciones cuando n: int es la entrada…

def permutation(lst):
    if len(lst) == 0:
        return []
    if len(lst) == 1:
        return [lst]
    l = []
    for i in range(len(lst)):
        m = lst[i]
        remLst = lst[:i] + lst[i + 1:]
        for p in permutation(remLst):
            l.append([m] + p)
    return l

¿Qué cambios debo hacer para que mi código funcione?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para modificar el código para que funcione con n: int en lugar de una lista, puedes crear una lista de números del 1 al n y pasarla como argumento a la función permutation(). Aquí está el código modificado:

    def permutation(n):
        lst = list(range(1, n+1))
        if len(lst) == 0:
            return ()
        if len(lst) == 1:
            return (lst,)
        results = []
        for i in range(len(lst)):
            m = lst[i]
            remLst = lst[:i] + lst[i + 1:]
            for p in permutation(remLst):
                results.append((m,) + p)
        return tuple(results)
    

    Cambios notable:

    • La función ahora toma un único argumento n.
    • Dentro de la función, se crea la lista lst utilizando la función range().
    • El caso base devuelve una tupla vacía () y una tupla con un solo elemento (lst,).
    • Los resultados se recogen en una lista results y se convierten en una tupla antes de devolverlos.

    Con esta modificación, puedes llamar a la función con un solo argumento entero para obtener todas las permutaciones:

    >>> permutation(3)
    ((1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1))
    >>> permutation(5)
    ((1, 2, 3, 4, 5), (1, 2, 3, 5, 4), ..., (5, 4, 3, 2, 1))
    

Comments are closed.