-1

私は楽しいために "遺伝的プログラミングのフィールドガイド"と呼ばれるこの本を勉強しています。この本は私にはPythonのオブジェクトのように見える数学構造を使用しています。そこで私は、キーや子オブジェクトの名前を事前に知らなくても、Pythonのオブジェクトをどのように反復処理するかを考えようとしています。Pythonでオブジェクトを再帰的に反復する

は、ここで私はPythonのオブジェクトに再作成しようとしてるの本からの写真です:今

Math Objects

、私はちょうどそれらをコンソールに出力するために取得しようとしています。以下は私が試みたものです。オブジェクトで

#!/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]} 

が、私はどのように考え出したていませんキー名を知らずにオブジェクトを反復処理します。

ご協力いただきありがとうございます。

+1

[ネストされたすべての辞書値をループする]の可能な複製?(https://stackoverflow.com/questions/10756427/loopthroughthroughallall-nested-dictionary-values) – quamrana

答えて

1

はコードをチェックしていませんが、それは役に立ちます:

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 
+0

返答はPythonのeval()関数で実行できるので、私はこの答えを受け付けています。 –

1

作成しようとしているのは、バイナリツリーです。つまり、ノードと2つの子を含む構造です。作成した辞書のために、あなたは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 
+0

あなたの一般的なアプローチは、私が探していたものです、 ありがとうございました! –

+0

@WayneWorkmanこの回答が役に立った場合は、それを受け入れてください。 – Ajax1234

関連する問題