【问题标题】:How can I determine the dimensionality of a list?如何确定列表的维度?
【发布时间】:2012-07-04 13:02:30
【问题描述】:

如何以编程方式确定列表的维度?谢谢。

【问题讨论】:

  • 列表总是是一维的。
  • 列表是 not 数组:(嵌套)列表中的条目不必是相同的结构。 [a, [b,c]] 是合法列表,但实际上并没有维度。

标签: python list multidimensional-array


【解决方案1】:

对于一个简单的列表,您可以使用len 获取其长度:

>>> l = [1, 2, 3, 4, 5]
>>> len(l)
5

对于最容易表示为嵌套列表的矩阵,您可以获得第一个子列表的长度,例如:

>>> matrix = [
    [1, 2],
    [3, 4],
    [5, 6],
    [7, 8],
    [9, 10]]
>>> len(matrix)
5
>>> len(matrix[0])
2

考虑到 JBernardo 的评论,定义一个简单的 iterable 助手:

>>> def iterable(x):
    if isinstance(x, basestring): return False
    try:
        iter(x)
    except TypeError:
        return False
    return True

>>> iterable(4)
False
>>> iterable([1, 2, 3])
True

然后我们可以递归定义dimensionality函数:

>>> def dimensionality(l):
    if not iterable(l): return 0
    return 1 + dimensionality(l[0])

>>> dimensionality(0)
0
>>> dimensionality([1, 2, 3])
1
>>> dimensionality([[1,2], [2,3], [3,4]])
2
>>> dimensionality([[[1,2],[2,3]], [[2,3],[3,4]], [[3,4],[4,5]]])
3

您可以使用isinstance(x, list) 或您想要的任何其他检查来代替iterable。编辑排除字符串以避免dimensionality('lol')无限循环。

【讨论】:

  • 也许OP的意思是维数。
  • dimensionality('lol') -> 无限循环。确保排除字符串。
【解决方案2】:

假设均匀性:

dims = []
while isinstance(matrix, list) and matrix is not None:
    dims.append(len(matrix))
    matrix = matrix[0]
number_of_dimensions = len(dims)

希望有帮助

【讨论】:

  • 乐于助人。如果您喜欢答案,请考虑支持/接受
  • 抱歉耽搁了-去看新的蜘蛛侠电影。刚回到我的办公桌前工作。根据 python 的版本,None 对象可以是各种类型。 isinstance(None, list) 在某些版本中返回 True。我编写此代码是为了与版本无关。它应该适用于 python 2.x(不能确定 3.x)
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 2013-05-22
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多