【问题标题】:How to find the maximum depth of a list in python [duplicate]如何在python中找到列表的最大深度[重复]
【发布时间】:2022-02-19 05:53:07
【问题描述】:

我正在尝试创建一个返回列表最大“深度”的函数。如果列表中不包含其他列表,则应返回 1。如果列表中最多包含一个列表,则应返回 2。如果列表中最多包含两个列表,则应返回 3,并且以此类推。

例子:

depth_one = [1, 2, 3]  # should return 1
depth_two = [1, [2], 3] # should return 2
depth_three = [1, [[2], 3], [4]] # should return 3

我正在考虑使用递归算法,但我想不通。

【问题讨论】:

  • 到目前为止你有什么尝试,numpy 与这个问题有什么关系?
  • “我在考虑使用递归算法,但我想不通。”那么,你能写出递归算法吗?为了制定递归算法,您应该采取哪些步骤?当您尝试遵循这些步骤并写下您对必要过程的理解时会发生什么 - 使用真正的钢笔或铅笔在纸上?
  • 我试图使用 numpy.shape 来获取此列表的形状,但显然这不适用于此类列表。
  • "但显然这不适用于这种类型的列表。"嗯,是;在 Numpy 的意义上,这个数据没有“形状”。 Numpy 数据必须在数据中的每个点在每个维度上具有相同的长度。

标签: python numpy


【解决方案1】:

递归表达的方式是,列表的深度等于其最深子列表的深度加一。

因此:

>>> def depth(arr):
...     if not isinstance(arr, list):
...         return 0
...     return 1 + max(depth(i) for i in arr)
...
>>> depth([1, 2, 3])
1
>>> depth([1, [2], 3])
2
>>> depth([1, [[2], 3], [4]])
3

【讨论】:

  • 这是最pythonic的方法,但也可以计算'['减去']'的最大值。
  • 如果列表元素之一是字符串"[[[[[[["怎么办?
  • 这是一个很好的观点。
猜你喜欢
  • 2021-02-24
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2013-04-15
  • 2016-06-14
  • 1970-01-01
相关资源
最近更新 更多