如何在Python中返回可迭代对象?

时间:2018-06-11 09:38:05

标签: python python-3.x

我有一棵树。我有几个涉及扫描整棵树的任务。

我想编写一个函数,例如scanTree (),它将按特定顺序扫描树,然后返回一个可迭代对象。

这个想法是:

def task1 (self):
  x = self.scanTree ()
  for y in x:
    do_something1(y)

def task2 (self):
  x = self.scanTree ()
  for y in x:
    do_something2(y)

但我不知道我可以在函数scanTree中返回什么样的对象。

你能给我一些提示吗?

非常感谢,

1 个答案:

答案 0 :(得分:1)

这看起来像是generators的工作。假设您的btree类看起来像这样:

df = pd.DataFrame([
    (0, (1,2)),
    (1, (2,3))    
])

df.nunique()

#  0    2
#  1    2
#  dtype: int64

然后,您可以编写一个class BTree: def __init__(self, value, left=None, right=None): self._value = value self._left = left self._right = right 按顺序进行按顺序遍历:

scanTree()

然后你就这样使用它:

def scanTree(self):
  '''
  Traverse the binary tree in-order
  '''
  if self._left is not None:
    yield from self._left.scanTree()
  yield self._value
  if self._right is not None:
    yield from self._right.scanTree()

这里有很多概念可以深入理解这一点,但基本思想非常直观:你编写相同的循环,就好像你打算按照你想要的顺序打印元素,除了你使用{{1而不是打印,并且只要你递归就>>> l = BTree(1) >>> r = BTree(3) >>> t = BTree(2, l, r) >>> it = t.scanTree() >>> it <generator object BTree.scanTree at 0x7fc20602a728> >>> list(it) [1, 2, 3]