2

我有一个包含列表和更多元组的元组。我需要将其转换为具有相同结构的嵌套列表。例如,我想转换(1,2,[3,(4,5)])[1,2,[3,[4,5]]].

我该怎么做(在 Python 中)?

4

4 回答 4

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

我能想象的最短的解决方案。

于 2009-06-18T19:19:02.133 回答
8

作为一个python新手,我会试试这个

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
于 2009-06-18T18:48:36.367 回答
2

我们可以(ab)使用json.loads总是为 JSON 列表生成 Python 列表的事实,同时json.dumps将任何 Python 集合转换为 JSON 列表:

import json

def nested_list(nested_collection):
    return json.loads(json.dumps(nested_collection))
于 2016-03-30T11:50:23.603 回答
0

这是我想出的,但我更喜欢另一个。

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)

我看到aztek的答案可以缩短为:

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

更新:但是现在我从DasIch的评论中看到,这在 Python 3.x 中不起作用,因为 map() 那里返回了一个生成器。

于 2009-07-31T01:50:40.920 回答