중첩 된 튜플과 목록을 파이썬의 목록 목록으로 어떻게 변환합니까?

StackOverflow https://stackoverflow.com/questions/1014352

  •  06-07-2019
  •  | 
  •  

문제

목록과 더 많은 튜플이 들어있는 튜플이 있습니다. 동일한 구조로 중첩 목록으로 변환해야합니다. 예를 들어 변환하고 싶습니다 (1,2,[3,(4,5)]) 에게 [1,2,[3,[4,5]]].

(파이썬에서) 이것을 어떻게합니까?

도움이 되었습니까?

해결책

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

내가 상상할 수있는 가장 짧은 해결책.

다른 팁

파이썬 초보자로서 나는 이것을 시도 할 것이다

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]]]

또는 하나의 라이너를 좋아한다면 :

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

우리는 (AB) 사실을 사용할 수 있습니다 json.loads 항상 JSON 목록의 Python 목록을 생성합니다 json.dumps Python 컬렉션을 JSON 목록으로 바꿉니다.

import json

def nested_list(nested_collection):
    return json.loads(json.dumps(nested_collection))

이것이 제가 생각해 낸 것이지만 다른 사람이 더 좋아집니다.

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

업데이트:하지만 이제 나는 본다 다 치치Map ()가 생성기를 반환하기 때문에 이것이 Python 3.x에서는 작동하지 않을 것이라는 의견.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top