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 restarle uno a cada elemento para generar una lista que contenga solo ceros? Intenté resolverlo de forma recursiva.

Si tengo una lista, ¿cómo puedo restarle uno a cada elemento de forma recursiva? Implementé este código.

lista = [5,4,3,2,1,1]
nivel = lista[0]

def list_arrays(numeros):
    if len(numeros) - 1 < nivel:
        print("nograph")
   else:
        for i in range(len(numeros)):
            numeros[i] = numeros[i] - 1
            print(numeros)

La salida debería ser así:

> [4,3,2,1,0,0]
> [3,2,1,0,0,0]
> [2,1,0,0,0,0]
> [1,0,0,0,0,0]

Pero solo se muestra el primer arreglo.

> [4,3,2,1,0,0]
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer que el código funcione de manera recursiva, es necesario llamar a la función nuevamente con la lista actualizada hasta que se cumpla el caso base donde todos los elementos son iguales a 0. Aquí tienes un código actualizado que lo hace:

    numbers = [5,4,3,2,1,1]
    
    def list_arrays(numbers):
        print(numbers)
        if all(x == 0 for x in numbers):
            return
        else:
            new_numbers = [x-1 for x in numbers]
            list_arrays(new_numbers)
    
    list_arrays(numbers)
    

    La salida será:

    [5, 4, 3, 2, 1, 1]
    [4, 3, 2, 1, 0, 0]
    [3, 2, 1, 0, 0, 0]
    [2, 1, 0, 0, 0, 0]
    [1, 0, 0, 0, 0, 0]
    

    Explicación:

    • La expresión all(x == 0 for x in numbers) verifica si todos los elementos en numbers son iguales a 0, si es así, se detiene la recursión.
    • La variable new_numbers se asigna a una nueva lista, donde cada elemento se resta en 1.
    • La llamada list_arrays(new_numbers) llama a la función nuevamente con la lista actualizada hasta que se cumpla el caso base.

Comments are closed.