Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

435
Views
¿Cuál es el algoritmo correcto para crear una lista de rutas de directorio?

Lo que tengo:

Tengo una lista de tuplas. El primer elemento de estas tuplas representa el nivel de una carpeta en un directorio, mientras que el segundo elemento representa el nombre de la carpeta. Estas tuplas también están ordenadas según su relación con el

Así es como se ve la lista:

 single_paths = [ [0, "1st Top Level Folder"], [1, "1st Child To 1st Top Level Folder"], [2, "1st Grandchild To 1st Child Folder"], [2, "2nd Grandchild To 1st Child Folder"], [1, "2nd Child To 1st Top Level Folder"], [2, "1st Grandchild To 2nd Child Folder"], [0, "2nd Top Level Folder"], [1, "1st Child To 2nd Top Level Folder"], [0, "3rd Top Level Folder"], ]

Representación visual del árbol de directorios:

ingrese la descripción de la imagen aquí

Lo que quiero lograr: una lista de todos los caminos posibles que se vea así:

 possible_paths = [ ["1st Top Level Folder"], ["1st Top Level Folder", "1st Child To 1st Top Level Folder"], ["1st Top Level Folder", "1st Child To 1st Top Level Folder", "1st Grandchild To 1st Child Folder"], ["1st Top Level Folder", "1st Child To 1st Top Level Folder", "2nd Grandchild To 1st Child Folder"], ["1st Top Level Folder", "2nd Child To 1st Top Level Folder"], ["1st Top Level Folder", "2nd Child To 1st Top Level Folder", "1st Grandchild To 2nd Child Folder"], ["2nd Top Level Folder"], ["2nd Top Level Folder", "1st Child To 2nd Top Level Folder"], ["3rd Top Level Folder"], ]

¿Qué algoritmo recomendarías para lograr esto? He pasado 3 días en esto y parece que no puedo obtener el resultado correcto. Gracias por su ayuda de antemano.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Dado que los niveles están ordenados, puede subir ciertos niveles una vez que los niveles sean más pequeños que los anteriores:

 possible_paths = [] for i, (level, name) in enumerate(single_paths): if level == 0: cur_path = [] elif level <= single_paths[i-1][0]: cur_path = cur_path[:-(1 + single_paths[i-1][0] - level)] cur_path.append(name) possible_paths.append(cur_path[:])
over 4 years ago · Santiago Trujillo Report

0

Publicando el mío también, solo porque ya lo completé antes de notar que ya se publicaron 2 respuestas casi idénticas.

 result = [] cur_level = -1 cur_path = [] for level, name in single_paths: if level<=cur_level: cur_path = cur_path[:level] cur_path.append(name) result.append(cur_path.copy()) cur_level = level
over 4 years ago · Santiago Trujillo Report

0

Recomendaría el algoritmo más simple jamás;)

 single_paths = [ [0, "1st Top Level Folder"], [1, "1st Child To 1st Top Level Folder"], [2, "1st Grandchild To 1st Child Folder"], [2, "2nd Grandchild To 1st Child Folder"], [1, "2nd Child To 1st Top Level Folder"], [2, "1st Grandchild To 2nd Child Folder"], [0, "2nd Top Level Folder"], [1, "1st Child To 2nd Top Level Folder"], [0, "3rd Top Level Folder"], ] stack = [] for node in single_paths: if stack: top = stack[-1] while stack and top[0] >= node[0]: top = stack.pop() stack.append(node) print(stack) # you can store it too, res.append([el[1] for el in stack])

Generalmente almacenamos en la pila todos los nodos en la ruta actual. Si el siguiente nivel de nodo es más grande, simplemente lo agregamos a la ruta, pero si no, debemos eliminar la mayor cantidad de nodos de la ruta hasta que nos detengamos en un nivel más pequeño que el nivel del nodo de procesamiento.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!