Necesito escribir una función que reciba un número entero no negativo y devuelva:
[] for n=0 [[]] for n=1 [[],[[]]] for n=2 [[],[[]],[[],[[]]]] for n=3 Y así. Para n , recibiremos una lista de tamaño n , de modo que en el índice i estarán todos los elementos i-1 de la lista. No sé cómo explicarlo mejor, el inglés no es mi primer idioma.
No se me permite usar el corte de lista o los bucles y se supone que debo crear copias profundas de cada lista, sin el módulo de copy . No puedo permitir que 2 listas o índices diferentes apunten a la misma lista en la memoria.
Esto es lo que probé:
def list_seq(x, outer_list=[]): if x == 0: return [] outer_list.append(list_seq(x-1,outer_list)) return outer_list Y la salida para print(list_seq(2)) es [[], [...]] .
Puede escribir esto como una función recursiva usando una lista simple de comprensión:
def f(n): return [f(i) for i in range(n)] O en lugar de la lista de comprensión, también podría usar map :
def f(n): return list(map(f, range(n)))Tenga en cuenta, sin embargo, que sin el almacenamiento en caché , esto se volverá bastante lento con bastante rapidez.
Si no puede usar bucles, puede usar lo siguiente:
def recursive_list(n): if n == 0: return [] else: return recursive_list(n-1) + [recursive_list(n-1)] Puede hacer lo siguiente si desea utilizar append :
def recursive_list(n: int) -> list: if n: result = recursive_list(n-1) result.append(recursive_list(n-1)) return result return [] NOTA , como se señaló en los comentarios, el almacenamiento en caching presenta algunos problemas de referencia, por lo que eliminé las versiones en caché.
Una solución recursiva alternativa más corta, sin bucles:
def l_list(n): def f(c, d = []): return d if c == n else f(c+1, d+[l_list(c)]) return f(0) print(l_list(0)) print(l_list(1)) print(l_list(2)) print(l_list(3))Producción:
[] [[]] [[], [[]]] [[], [[]], [[], [[]]]]Solo otra idea, creo que cumple con todas las reglas/requisitos:
def f(n): a = [] exec('a.append(1 * a);' * n) return eval(repr(a))Uso de demostración:
for n in range(5): print(f(n))Producción:
[] [[]] [[], [[]]] [[], [[]], [[], [[]]]] [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]