Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

234
Vistas
Crear una lista recursiva anidada sin cortar

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 [[], [...]] .

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

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.

over 4 years ago · Santiago Trujillo Denunciar

0

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)]

EDITAR

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é.

over 4 years ago · Santiago Trujillo Denunciar

0

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:

 [] [[]] [[], [[]]] [[], [[]], [[], [[]]]]
over 4 years ago · Santiago Trujillo Denunciar

0

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:

 [] [[]] [[], [[]]] [[], [[]], [[], [[]]]] [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda