Как получить все полные пути ко всем дочерним элементам - PullRequest
0 голосов
/ 28 июня 2019

Учитывая дерево на основе списка списков:

tree = [
  "A",
  [
    "B1",
    [
      "C"
    ]
  ],
  [
    "B2",
    [
      "C",
      [
        "D1",
        [
          "E1"
        ],
        [
          "E2"
        ]
      ],
      [
        "D2"
      ]
    ]
  ]
]

Я хочу получить полный путь ко всем дочерним элементам в виде объединенной строки в списке.

result = [
  'A>B1>C',
  'A>B2>C>D1>E1',
  'A>B2>C>D1>E2',
  'A>B2>C>D2'
]

Разделитель> изменчив.

Я пробовал разные вещи с рекурсией и доходностью.Но моя голова горит.

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Попробуйте это работает.

def leave_paths(current):
    if len(current) == 1:
        return [current]
    # Take all branches, get the paths for the branch, and prepend
    return [[current[0]] + path for branch in current[1:] for path in leave_paths(branch)]

output = ['>'.join(sub_list) for sub_list in leave_paths(s)]
print(output)

выход

['A>B1>C', 'A>B2>C>D1>E1', 'A>B2>C>D1>E2', 'A>B2>C>D2']

0 голосов
/ 28 июня 2019

что-то вроде этого

def findLeaves(tree):
   name=tree[0]
   If len(tree)==1:
      return [name]
   else:
      return [name+"->"+path for branch in tree[1:] for path in findLeaves(branch)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...