Я анализирую файл, в котором метки определены, как показано ниже, с иерархиями, представленными с помощью новых строк
+--------------------+--------------------+--------------------+
| L1 - A | | |
| | L2 - B | |
| | | L3 - C |
| | | |
| L1 - D | | |
| | L2 - E | |
| | | L3 - F |
+--------------------+--------------------+--------------------+
Я представляю вышеизложенное как:
labels = [
['A', None, None, None, 'D', None, None],
[None, 'B', None, None, None, 'E', None],
[None, None, 'C', None, None, None, 'F']
]
Я пытался
def joinfoo(items):
if len(items) == 1:
return items[0]
result = []
active = None
for x, y in zip(items[0], joinfoo(items[1:])):
active = x if x else active
if type(y) is tuple:
result.append((active, y[0], y[1]))
else:
result.append((active, y))
return result
Я хотел
[
('A', None, None), ('A', 'B', None), ('A', 'B', 'C'),
(None, None, None),
('D', None, None), ('D', 'E', None), ('D', 'E', 'F')
]
и получил это
[
('A', None, None), ('A', 'B', None), ('A', 'B', 'C'),
('A', 'B', None),
('D', 'B', None), ('D', 'E', None), ('D', 'E', 'F')
]
Предложения по исправлению joinfoo()
для достижения желаемого результата?Решение должно поддерживать переменное количество столбцов.
Это должно быть что-то вроде for x, y in zip(joinfoo(items[:-1]), items[-1]):
вместо for x, y in zip(items[0], joinfoo(items[1:])):
, чтобы идти в правильном направлении ...?
Редактировать: Исходный списоксписков, возможно, неправильно подразумевал образец для иерархии.Там нет определенного шаблона.Количество столбцов также является переменным.Может быть, лучше тестовый пример ..
+--------------+--------------+--------------+
| L1 - A | | | = A
| | L2 - B | | = A - B
| | | L3 - C | = A - B - C
| | | L3 - D | = A - B - D
| | L2 - E | | = A - E
| | | | =
| L1 - F | | | = F
| | L2 - G | | = F - G
| | | L3 - H | = F - G - H
+--------------+--------------+--------------+
labels = [
['A', None, None, None, None, None, 'F', None, None],
[None, 'B', None, None, 'E', None, None, 'G', None],
[None, None, 'C', 'D', None, None, None, None, 'H']
]