【问题标题】:How to convert nested lists into nested tuples in Python如何在 Python 中将嵌套列表转换为嵌套元组
【发布时间】:2021-05-20 14:02:49
【问题描述】:

如何将此 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,))

【问题讨论】:

  • 预期输出是什么?
  • 只需添加另一个元组理解tuple(tuple(tuple(tuple(k for k in j) for j in i) for i in x))。这将导致您的示例出错,因为最后一个元素 100 没有正确嵌套,无法成为 3D 列表。
  • @Cubed 这仍然不是一个通用的方法。如果您有超过 3 个嵌套级别,您的建议将失败。

标签: python list tuples list-comprehension


【解决方案1】:

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


例如,

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,))

【讨论】:

    【解决方案2】:

    您需要将 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,))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多