在Python中递归地迭代对象

在Python中递归地迭代对象,python,python-2.7,object,genetic-algorithm,genetic-programming,Python,Python 2.7,Object,Genetic Algorithm,Genetic Programming,为了好玩,我正在学习这本叫做《基因编程现场指南》的书。这本书使用的数学结构在我看来非常像Python中的对象。因此,我试图找出如何在Python中迭代对象,而不事先知道键或子对象的名称 下面是我试图在python对象中重新创建的书中的一张照片: 现在,我只是想把它们打印到控制台上。下面是我试过的 #!/usr/bin/python def iterate(object): for item in object: print str(object) it

为了好玩,我正在学习这本叫做《基因编程现场指南》的书。这本书使用的数学结构在我看来非常像Python中的对象。因此,我试图找出如何在Python中迭代对象,而不事先知道键或子对象的名称

下面是我试图在python对象中重新创建的书中的一张照片:

现在,我只是想把它们打印到控制台上。下面是我试过的

#!/usr/bin/python

def iterate(object):
    for item in object:
        print str(object)
        iterate(object)

object = {}
object['+'] = []
object['+'].append(5)
object['+'].append(3)

iterate(object)
在对象中,我只是尝试迭代一个非常简单的数学结构:

{"+": [5, 3]}
最终应该等于5+3,但我还没有弄清楚如何在不知道对象的键名的情况下迭代对象


非常感谢您的帮助。

您试图创建的是一个二叉树,即包含一个节点和两个子节点的结构。对于已创建的词典,可以使用For循环和
dict.items()
进行迭代:

但是,对于更通用的递归解决方案:

d = {"+": [5, 3]}
def flatten(s):
   for i in s:
      if isinstance(i, int) or isinstance(i, str):
         print(i)
      else:
         flatten(i)

flatten(d.items())
输出:

'+'
 5
 3

您试图创建的是一个二叉树,即包含一个节点和两个子节点的结构。对于已创建的词典,可以使用For循环和
dict.items()
进行迭代:

但是,对于更通用的递归解决方案:

d = {"+": [5, 3]}
def flatten(s):
   for i in s:
      if isinstance(i, int) or isinstance(i, str):
         print(i)
      else:
         flatten(i)

flatten(d.items())
输出:

'+'
 5
 3

未检查代码,但这可能会有所帮助:

def iterate(object):
    if isinstance(object,dict):
        for key, item in object.items():
            leftItem = item[0]
            rightItem = item[1]
            if isinstance(leftItem,dict):
                return iterate(item)
            else:
                return str(leftItem) + str(key) + str( iterate(rightItem) )
    else:
        return object

未检查代码,但这可能会有所帮助:

def iterate(object):
    if isinstance(object,dict):
        for key, item in object.items():
            leftItem = item[0]
            rightItem = item[1]
            if isinstance(leftItem,dict):
                return iterate(item)
            else:
                return str(leftItem) + str(key) + str( iterate(rightItem) )
    else:
        return object

可能重复的可能重复的你的通用方法正是我所寻找的,谢谢!你的通用方法正是我想要的,谢谢!我接受这个答案是因为返回可以通过python的eval()函数运行,我接受这个答案是因为返回可以通过python的eval()函数运行。