Python 如何将嵌套列表转换为嵌套元组

How to convert nested lists into nested tuples in Python

如何将这个 3D 列表转换为元组?

[[[0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0]],
 [[0, 0], [0, 0]],
 [100]]

我使用这个代码:

tuple(tuple(tuple(j for j in i) for i in x))

但我的结果还有[]

(([0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0]),
 ([0, 0], [0, 0]),
 (100,))

我的理解是,您只想将嵌套列表转换为嵌套元组。如果这是您所需要的,那么您可能需要提出一种 递归方法 来处理具有任意数量的嵌套列表的情况。


例如,

def nested_list_to_tuple_recur(nested_list):
    return tuple(
      nested_list_to_tuple_recur(l) if isinstance(l, list) 
      else l for l in nested_list
    )

最后调用函数:

nested_list_to_tuple_recur(x)

输出将是

(((0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0),
  (0, 0, 0, 0, 0, 0, 0, 0)),
 ((0, 0), (0, 0)),
 (100,))

你需要将100包到​​另一个列表中,否则会有不同级别的,有些包装在2个列表中有些只在一个列表中。如果你解决了这个问题,你可以试试这个:

l = [[[0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0]],
 [[0, 0], [0, 0]],
 [[100]]]


tuple(tuple(x) for y in l for x in y)

# ((0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0, 0, 0, 0, 0, 0, 0),
#  (0, 0),
#  (0, 0),
#  (100,))