Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

241
Visualizações
Problemas para imprimir una expresión generadora como una lista

Estoy tratando de devolver los valores de todas las hojas en un árbol binario con un generador y pongo los valores obtenidos en una lista. Este es mi código recursivo que usa declaraciones de rendimiento, pero no sé cómo devolver los valores finales con un generador. El segundo fragmento de código titulado "Código anterior" muestra el mismo código con declaraciones de impresión que genera los valores correctos, por lo que el único problema es el generador. Como nota, este código usa root.left y root.right importados de una clase de árbol binario y parece funcionar correctamente. ¡¡Gracias de antemano por cualquier ayuda!!

Mi código

 def leaves_list(self): def find(root): if not root: yield if not root.left and not root.right: yield root.data if root.left: find(root.left) if root.right: find(root.right) # my attempt a = find(self.root) lst = [] for i in a: lst.append(next(a)) return find(self.root)

Código anterior

 def leaves_list(self): def find(root): if not root: return if not root.left and not root.right: print(root.data, end = " ") return if root.left: find(root.left) if root.right: find(root.right) return find(self.root)

Este es mi código de prueba y debería devolver la lista [5, 1, 8, 4] .

Código del probador

 root = LinkedBinaryTree.Node(3) T = LinkedBinaryTree(root) a = LinkedBinaryTree.Node(2) a.parent = root root.left = a b = LinkedBinaryTree.Node(7) b.parent = root root.right = b c = LinkedBinaryTree.Node(9) c.parent = a a.left = c d = LinkedBinaryTree.Node(5) d.parent = c c.left = d e = LinkedBinaryTree.Node(1) e.parent = c c.right = e f = LinkedBinaryTree.Node(8) f.parent = b b.left = f g = LinkedBinaryTree.Node(4) g.parent = b b.right = g print(T.leaves_list())
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Hay algunos problemas con su intento:

  • find(self.root) se llama dos veces. Esto no debería ser necesario ya que hará el trabajo dos veces para obtener el mismo resultado nuevamente.

  • lst se crea y se llena, pero nunca se usa. Probablemente deberías devolverlo.

  • No consuma un iterador con un bucle for y con llamadas repetidas a next() . Cuando lo hace, en realidad pasa al siguiente valor dos veces en cada iteración, omitiendo así un valor en cada iteración.

  • Considere también que la función de list estándar ya tiene esta función de crear una lista a partir de un iterador.

  • En la función de find , no está haciendo nada con los valores generados por la llamada recursiva. Deberías cederlas también. Puede usar el yield from la sintaxis para eso.

  • if not root no funcionará correctamente cuando el árbol esté realmente vacío, ya que la ejecución aún continúa después de ese bloque if , por lo que se generará una excepción. Necesitas un return allí.

  • Además, cuando el árbol está vacío, no debería haber nada que se produzca. Se permite que un iterador simplemente no produzca nada, lo cual es apropiado en ese caso.

  • No hay problema, pero dado que tiene if not root como caso base, realmente no necesita verificar None antes de ir a la izquierda o a la derecha. Entonces, esas condiciones if se pueden eliminar y las llamadas recursivas se pueden hacer incondicionalmente.

Aquí está la versión corregida:

 def leaves_list(self): def find(root): if not root: return if not root.left and not root.right: yield root.data yield from find(root.left) yield from find(root.right) return list(find(self.root))
over 4 years ago · Santiago Trujillo Relatório

0

# my attempt a = find(self.root) lst = [] for i in a: lst.append(i) return lst

Una alternativa más corta:

 # my attempt return list(find(self.root))
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda