Преобразование глубины уровня в подчиненный счет - PullRequest
0 голосов
/ 14 февраля 2011

Давайте рассмотрим этот пример текстового файла:

Level: 1
Level: 1
Level: 2
Level: 2
Level: 2
Level: 3
Level: 3
Level: 1
Level: 2
Level: 2
Level: 1

Мне нужно преобразовать эти строки, используя предоставленные данные уровня для подсчета подчиненных (исключая подчиненных подчиненных) Результат должен выглядеть так:

:0
:3
:0
:0
:2
:0
:0
:2
:0
:0
:0

Моей первой мыслью было преобразование текстового файла в XML и использование простой техники парсера xml в качестве решения, но потом я вспомнил, что иногда python может творить чудеса, и подумывал спросить совета, если кто-то знает, как это сделать "питоническим" способом (без помощи xml)

Спасибо

1 Ответ

1 голос
/ 14 февраля 2011

Возможное решение:

input_text = """Level: 1
Level: 1
Level: 2
Level: 2
Level: 2
Level: 3
Level: 3
Level: 1
Level: 2
Level: 2
Level: 1"""

# Parse input text into a list of levels (as int)
levels = []
for line in input_text.split('\n'):
    try:
        levels.append(int(line.split(': ', 1)[-1]))
    except Exception:
        pass # skip line

# Compute how many children each node has by counting the number of
# consecutive subsequent lines that belong to exactly the next level
counters = [0] * len(levels)
for i, level in enumerate(levels):
    for other in levels[i + 1:]:
        if other == level + 1:
            counters[i] += 1
        elif other == level:
            break

print '\n'.join(':%d' % c for c in counters)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...