Utilizando la recursión para obtener listas de una lista original en Python devuelve un error.
Se me ha asignado una tarea para utilizar la recursividad de manera que cualquier lista que se le proporcione, digamos p, se devuelva en la salida deseada que se muestra al final, sin alterar o cambiar el contenido de p. Cuando ejecuto esta función, dice que la variable local (y) se hace referencia sin asignación, es decir, len(y)==0, pero ya he asignado y fuera de la función init. ¿Alguien puede ayudarme a identificar qué está mal?
y=[] # Para copiar el contenido de x en él para que x no sea modificado
z=[] # Para devolverlo como una lista requerida en la pregunta
p=[1,2,3]
def inits(x):
if len(y)==0 and len(z)==0:
y=[i.copy for i in x] # Copiando el contenido de x en y para que no cambie
if len(z)==len(x)+1: # La lista z tiene un elemento más que la lista x porque tiene []
print(z)
else:
z.append(y.copy())
if len(y)!=0: # Esto se hace para que cuando y=[] no devuelva un error por y.pop(-1)
y.pop(-1)
inits(x)
inits(p)
# Salida deseada
[[1,2,3],[1,2],[1],[]]
davy.ai
El problema con el código es que la variable
y
está definida fuera de la funcióninits
y también se está utilizando dentro de ella. Esto crea un conflicto porque Python intenta buscar una variable local con el nombrey
dentro de la función, pero no puede encontrarla ya que ya está definida fuera.Para resolver este problema,
y
debería ser definido dentro de la función o hacerlo global usando la palabra claveglobal
. Aquí hay una posible solución dondey
está definido dentro de la función:En esta solución,
y
se inicializa como una copia dex
cuando no se proporciona como argumento. El contenido dey
se agrega a la listaz
y la función se llama recursivamente con una porción dey
que excluye el último elemento. Este proceso continúa hasta que todas las porciones dey
se hayan agregado az
oy
se convierta en una lista vacía.