2014-11-30 3 views
0

목록 또는 목록 목록을 처리해야합니다. 나는 현재의 방법이 매우 효과적이지 않다는 것을 발견했다. 나는 일을하기위한 두 개의 분리 된 메소드를 정의하고 그것을 효과적으로 두 번 작성해야하기 때문이다. 들어오는 데이터가 목록 또는 목록 목록인지 확인한 다음 적절하게 진행하면 (일반적으로 들어오는 데이터의 각 항목에 대해 조치를 취하여 들어오는 데이터의 구조와 일치하는 목록 또는 목록을 출력하려고합니다) . 여기 처리 나의 예목록 목록이 있는지 확인하고 그에 따라 파이썬에서 반복하십시오.

if not any(isinstance(item, list) for item in keys): 
    userStrings = [] 
    for key in keys[index]: 
     userStrings[index].extend(item.GetUserStrings().GetValues(key)) 
else: 
    userStrings = [[] for i in range(len(rhObjects))] 
    for index, item in enumerate(rhObjects): 
     for key in keys[index]: 
      userStrings[index].extend(item.GetUserStrings().GetValues(key)) 

내가 뭘 목록 목록의 목록 등이 방법은 작동하지 않습니다 경우 훨씬 더 복잡한 뭔가가 발생하면 ... 아이디어?

감사합니다.

이것은 충분히 명확하지 않습니다. 다시 시작하겠습니다.

_list = [["X","Y","Z"],["X","Y","Z",["X","Y","Z"]],["X","Y","Z"]] 
_list2 = ["X","Y","Z"] 
_list3 = [["X","Y","Z"],["X","Y","Z"]] 

나는이 목록에서 각 개체에 간단한 기능을 수행한다하고 싶은 모든 (추가 "A : 나는리스트의 목록, 목록 또는 객체 목록의 목록도 목록이 있는지 상상 ") 또는 원래의 입력 목록의 구조와 일치하는 방식으로 완전히 새로운 객체를 만들 수 있습니다. 예 기능 :

def my_function(obj): 
     return obj + "A" 
    def my_function2(obj): 
     return newObj 

원하는 출력 :

_newList = [["XA","YA","ZA"],["XA","YA","ZA",["XA","YA","ZA"]],["XA","YA","ZA"]] 
_newList2 = ["XA","YA","ZA"] 
_newList3 = [["XA","YA","ZA"],["XA","YA","ZA"]] 

경우 또는

사용 my_function2 :

_newList = [["newObj","newObj","newObj"],["newObj","newObj","newObj",["newObj","newObj","newObj"]],["newObj","newObj","newObj"]] 

두 가지 기능을 제안 아래의 사용자처럼이 만들 ​​수있는 방법이 있나요? 하나의 재귀? 나는 재귀에 대한 완전한 멍청한 태도를 취했다. 그리고 당신이 맨 위에서 본 첫 번째 접근법은 목록 내에서 목록을 확인하는 나의 방법 이었지만 실제로는 융통성이 없었다. 전체/모든 도움을 주시면 감사하겠습니다!

답변

2

논리는 별도의 방법이어야하며 recursion을 사용해야합니다.

def process_list(_list): 
    new_list = [] 
    for x in _list: 
     if is_list(x): 
      new_list.append(process_list(x)) 
     else: 
      new_list.append(map(lambda y: y + "A",x)) 
    return new_list 

def is_list(l): 
    return type(l) == types.ListType 

_list = [["X","Y","Z"],["X","Y","Z",["X","Y","Z"]],["X","Y","Z"]] 
print(process_list(_list)) 
print(_list) 

코드는 재귀를 데모하기위한 것입니다. 희망을 얻고 똑같이 코드를 작성하십시오.

+0

내 코드는 재귀를 사용하여 목록의 목록을 검사 할 수 있다는 것을 보여주기위한 단순한 스케치입니다. 나는 당신의 논리를 모른 채 코드를 제공 할 수 없다. 당신이 그것에 더 기대고 싶다면 재귀를 위해 제공된 링크를 체크 아웃하십시오. –

+0

내가 질문에 추가 한 예제에서 설명 할 수 있습니까? 문자열로는 정말 간단하지만 목록은 정말 단순한 것에서 더 복잡한 것으로 다양합니다. 나는 그저 함수가 어떻게 설정되어야하는지보고 싶다. 스케치를 시도했을 때 실패했다. (무한 루프라고 생각한다.) – konrad

+1

나는 코드를 수정했다. 그것을 줘. –