在 Python 中递归迭代对象
Iterate over object recursively in Python
我正在研究这本名为 "A Field Guide to Genetic Programming" 的书,只是为了好玩。这本书使用的数学结构在我看来很像 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]}
for parent, children in d.items():
print(parent, children)
但是,对于更通用的递归解决方案:
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
我正在研究这本名为 "A Field Guide to Genetic Programming" 的书,只是为了好玩。这本书使用的数学结构在我看来很像 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]}
for parent, children in d.items():
print(parent, children)
但是,对于更通用的递归解决方案:
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