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.

ordenando recursivamente una lista utilizando min()

def sort(L, Lsorted):
    if len(L) == 1:
        return Lsorted.append(L[0])
    a = min(L)
    Lsorted.append(a)
    L.remove(a)
    return sort(L, Lsorted)

"""
La idea es que cada vez que se remueva el elemento mínimo de L y se agregue a otra lista, y al final se retorna la otra lista.
"""

"""
Este código retorna None cuando hago esto:
"""

if __name__ == '__main__':
    L = [9,1,11]
    L1 = []
    print(sort(L, L1))
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el código devuelve “None” cuando se ejecuta es porque la función sort en realidad no devuelve nada. Simplemente modifica la lista de entrada Lsorted. Por lo tanto, cuando intentas imprimir la salida de sort(L, L1), imprime “None” ya que la función no tiene ningún valor de retorno explícito adicional.

    Para solucionar este problema, puedes modificar el código para que la función devuelva la lista ordenada en lugar de confiar en modificar la segunda lista de entrada. Aquí hay una forma de hacerlo:

    def sort(L):
        if len(L) <= 1:
            return L
        pivot = L[0]
        left = []
        right = []
        for x in L[1:]:
            if x < pivot:
                left.append(x)
            else:
                right.append(x)
        return sort(left) + [pivot] + sort(right)
    

    En esta versión modificada, la función toma solo una lista de entrada L y se llama a sí misma de forma recursiva con las sublistas izquierda y derecha hasta que la lista esté ordenada. La salida final de la función es la lista ordenada, que luego puedes imprimir o utilizar según sea necesario. Así es como puedes ejecutarlo:

    if __name__ == '__main__':
        L = [9, 1, 11]
        L_sorted = sort(L)
        print(L_sorted)
    

    Esto debería imprimir [1, 9, 11], que es la versión ordenada de la lista de entrada L.

Comments are closed.