Создание структуры списка на основе значений глубины для элементов в Python - PullRequest
1 голос
/ 14 января 2020

Я пытаюсь создать структуру списка в списке строк, учитывая глубину каждой строки. Я понятия не имею, как закодировать это. Был бы признателен шаг в правильном направлении.

strings = ["tree", "branch", "leaf", "leaf", "leaf", "branch", "tree", "tree", "branch", "tree"]
depths  = [1,2,3,3,3,2,1,1,2,1]

Что я пытаюсь получить:

strings = ["tree", ["branch", ["leaf", "leaf", "leaf"], "branch"], "tree","tree", ["branch"], "tree"]

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вот решение для вашего вопроса. Сначала получите максимальное значение в глубинах и уровень декремента на 1. Если последовательный уровень, то добавьте к предыдущему массиву. Я надеюсь, что вы получите его.

Всякий раз, когда вы пытаетесь решить этот вопрос, составьте план того, как вы доберетесь до решения, и используйте отладчик, чтобы увидеть, работает ли ваш код так, как вы ожидали, или нет .

import copy

strings = ["tree", "branch", "leaf", "leaf", "leaf", "branch", "tree", "tree", "branch", "tree"]
depths  = [1,2,3,3,3,2,1,1,2,1]
output = copy.deepcopy(depths)

while max(depths)!=0:
    m = max(depths)
    last = -2
    while True:
        try:
            i = depths.index(m)
            depths[i]=m-1
            if i-1==last:
                output[i-1].append(strings[i] if isinstance(output[i], int) else output[i])
                last=i-1
                output.pop(i)
                depths.pop(i)
                strings.pop(i)
                continue
            else:
                output[i] = [strings[i]]
                last=i
        except:
            break

print(output[0])
#output[0] = ['tree', ['branch', ['leaf', 'leaf', 'leaf'], 'branch'], 'tree', 'tree', ['branch'], 'tree']
0 голосов
/ 14 января 2020

Попробуйте увидеть этот вопрос . У них могут быть некоторые общие факторы. В любом случае, я рекомендую вам искать в Интернете алгоритмы BFS и DFS, потому что они полезны для вашего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...