중첩 된 튜플과 목록을 파이썬의 목록 목록으로 어떻게 변환합니까?
문제
목록과 더 많은 튜플이 들어있는 튜플이 있습니다. 동일한 구조로 중첩 목록으로 변환해야합니다. 예를 들어 변환하고 싶습니다 (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에서는 작동하지 않을 것이라는 의견.
제휴하지 않습니다 StackOverflow