Итерация иерархии узлов - Посетитель и Составной объект?

Это довольно легко сделать с Пандами .

Общий процесс:

  • Чтение в CSV-файле как панде DataFrame.
  • Измените список на серии
  • Добавьте серию в фрейм данных
  • Сохраните фрейм данных

Письменный код:

import pandas as pd
import numpy as np

#import data
df = pd.read_csv('Your_Filename.csv')

#initialize list
list_A = np.arange(365)
list_B = np.arange(365)*2

#change list to series
series_A = pd.Series(list_A)
series_B = pd.Series(list_B) 

#save series as dataframe column
df['column_name_A'] = series_A.values
df['column_name_B'] = series_B.values

#save dataframe to csv
df.to_csv('output_filename.csv')

8
задан Matthieu M. 26 March 2011 в 11:57
поделиться

2 ответа

У меня есть что-то очень похожее, реализованное для нашей системы. Я хотел способ составить иерархию геометрического объекта и представить их в объеме. Я использовал составной шаблон для создания моего описания (корень был Узлом и затем произошел, ребенок был compositeNode (список Узлов).

CompositeNode имеет метод, принимают (), который принимает посетителя (Посетитель), и затем в принятии () Вы делаете посетителя-> посещение (это).

Таким образом Ваша иерархия посетителя имеет базовый класс как NodeVisitor и полученных посетителей как RenderVisitor (объекты рендеринга), ReportVisitor (выведенная информация об узле в текст). Ваш базовый класс должен будет принять и основу и специализированные типы узлов.

Таким образом да, комбинация работает, и у меня есть рабочий код, но я соглашаюсь, что дизайн прилагает больше усилий, чем, что Вы считали бы онлайн (Wiki или игрушечный пример).

Надеюсь, это поможет

5
ответ дан 5 December 2019 в 19:03
поделиться

Вот простой пример:

struct NodeVisitor;

struct Node
{
  virtual ~Node() {}
  virtual void accept(NodeVisitor &v);
};

struct CompositeNode : public Node
{
  virtual void accept(NodeVisitor &v);
  std::list<NodePtr> nodes_;
};

struct NodeVisitor
{
  virtual ~NodeVisitor() {}
  virtual void visit(Node &n) = 0;
  virtual void visit(CompositeNode &cn)
  {
    for(std::list<NodePtr>::iterator it = cn.nodes_.begin(), end = cn.nodes_.end(); it != end; ++it)
    {
      (*it)->accept(*this);
    }
  }
};
3
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: