-1

저는이 책을 "유전 프로그래밍을위한 필드 가이드"라는 책으로 연구하고 있습니다. 이 책은 수학 구조를 사용하여 나에게는 파이썬에서 객체와 매우 흡사하게 보입니다. 그래서 나는 키나 자식 객체의 이름을 미리 알지 못하고 파이썬에서 객체를 반복하는 법을 알아 내려하고있다.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/loop-through-all-nested-dictionary-values) – quamrana

답변

1
더 일반적인 재귀 솔루션, 그러나

d = {"+": [5, 3]} 
for parent, children in d.items(): 
    print(parent, children) 

: 사용자가 만든 사전의 경우, 당신은에 대한 루프와 dict.items()을 사용하여 반복 할 수

코드를 확인하지 않았지만 도움이 될 수 있습니다.

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

파이썬의 eval() 함수를 통해 반환 할 수 있기 때문에이 대답을 수락합니다. –

1

생성하려는 것은 이진 트리입니다. 즉 노드와 두 개의 하위가 포함 된 구조입니다.

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