KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to build a very lightweight Node class to serve as a Python-based hierarchy search tool. See the definition below. from functools import reduce from operator import or_ class Node: def __init__(self, name): self.name = name self.children = [] def add_child(self, child_node): self.children.append(child_node) def contains(self, other_node): if self == other_node: return True elif other_node in self.children: return True else: return reduce(or_, [child.contains(other_node) for child in self.children], False) def is_contained_by(self, other_node): return other_node.contains(self) def __eq__(self, other_node): return self.name == other_node.name def __de__(self, other_node): return self.name != other_node.name contains seems to be a textbook case of functional programming (pulled directly from Why Functional Programming Matters ). Question: is there a more efficient or Pythonic way of writing contains ? I know that map is usually replaced by list comprehension, but I hadn't seen a better way of doing reduce -based recursion. Thanks, Mike ===EDITED ... HERE'S THE REDONE CLASS TAKING INTO ACCOUNT THE ANSWER AND COMMENTS=== class Node: def __init__(self, name): self.name = name self.children = [] def add_child(self, child_node): # Hattip to lazyr for catching this. if self.contains(child_node) or child_node.contains(self): raise TreeError('A relationship is already defined.') else: self.children.append(child_node) def contains(self, other_n
Tags (comma-separated)
Save Edits
Cancel