2009-06-18 4 views
2

나는리스트와 더 많은 튜플을 포함하는 튜플을 가지고있다. 동일한 구조로 중첩 된 목록으로 변환해야합니다. 예를 들어, (1,2,[3,(4,5)])[1,2,[3,[4,5]]]으로 변환하고 싶습니다.튜플과리스트의 중첩 된 튜플을 파이썬의리스트리스트로 변환하려면 어떻게해야합니까?

어떻게해야합니까 (파이썬에서)?

def f(t): 
    return [f(i) for i in t] if isinstance(t, (list, tuple)) else t 
+7

나는 답을 알고하지만 난 당신에게주지 먼저 솔루션을 게시 할 수있는 기회. – SilentGhost

+0

그리고 대립은 계속됩니다 ..... – Randolpho

+0

질문이 있지만 역순으로 주문해야합니다 -() tsil. – gimel

답변

12
def listit(t): 
    return list(map(listit, t)) if isinstance(t, (list, tuple)) else t 

내가 상상할 수있는 가장 짧은 솔루션 : 한 라이너를 좋아하는 경우에

+0

map()은 항상 목록을 반환합니다. 목록 (map (...))은 map (...)이되어야합니다. – NicDumZ

+1

NicDumZ는 파이썬 2.x이지만 3.x map()에서 생성기를 반환합니다. – DasIch

+0

그리고 Christian의 대답과의 차이점은 무엇입니까? – SilentGhost

6

파이썬 초보자로서 나는이

def f(t): 
    if type(t) == list or type(t) == tuple: 
     return [f(i) for i in t] 
    return t 

t = (1,2,[3,(4,5)]) 
f(t) 
>>> [1, 2, [3, [4, 5]]] 

을 시도하거나 것입니다.

+4

오브젝트 유형을 확인해야 할 때 isinst를 사용하는 것이 좋습니다 ance() 함수. 보너스로 다음과 같이 한 번에 여러 유형을 확인할 수도 있습니다. isinstance (t, (list, tuple)) – efotinis

+0

hasattr (t, '__ iter__') – Jimmy

+0

@ 지미'hasattr (t, 'iter')' 왜냐하면 str이 반복 가능하기 때문입니다 (보통 문자 목록으로 변환하지 않으려 할 것입니다) –

0

이것은 내가 생각해 냈지만, 나는 다른 것이 더 좋았습니다. 내가 aztek

def deep_list(x): 
     """fully copies trees of tuples or lists to a tree of lists. 
     deep_list((1,2,(3,4))) returns [1,2,[3,4]] 
     deep_list((1,2,[3,(4,5)])) returns [1,2,[3,[4,5]]]""" 
     if not (type(x) == type(()) or type(x) == type([])): 
      return x 
     return map(deep_list,x) 

'

def deep_list(x): 
    return map(deep_list, x) if isinstance(x, (list, tuple)) else x 

업데이트 :의 대답은 단축 될 수있다하지만 지금은 DasIch에서 볼'이 이후 파이썬 3.x를 작동하지 않을 것이라고 코멘트 map()은 생성자를 반환합니다.

2

우리는 (AB)는 json.dumps는 JSON 목록에 파이썬 수집을 전환하면서 json.loads 항상 JSON 목록 파이썬 목록을 생성한다는 사실을 사용할 수 있습니다

import json 

def nested_list(nested_collection): 
    return json.loads(json.dumps(nested_collection)) 
관련 문제