Я имею дело с древовидной структурой в программе Python.
У каждого узла в дереве есть словарь «сыновья», ключи которого содержат информацию о дуге и значения
являются узлами сына. Вопрос в том, чтобы распространить список узлов всем их сыновьям.
Я использую:
current_nodes = reduce(lambda s,x:s+x, map(lambda node:node.sons.values(),current_nodes),[])
Где current_nodes
- начальный (и обновленный) список узлов.
Моя программа тратит большую часть времени на выполнение этой операции уменьшения. Есть ли более быстрый способ реализовать это?
Спасибо!
EDIT:
Привет, Просто дай знать, что код:
sum((node.sons.values() for node in current_nodes), [])
хотя pythonic, на самом деле не значительно быстрее - если список узлов
является длинным (> 20000), распространение замедляется непропорционально, на самом деле, очень медленно. Я не знаю почему.
Тогда я определяю:
def Ext(nodes)
l=[]
for node in nodes:
l.extend(node.sons.values())
return l
Тогда я использую: current_node = Ext(current_node)
.
Этот подход на самом деле намного быстрее. Я предполагаю, что функция sum () не так эффективна, как метод расширения списка при обработке конкатенации списка.