0
p = [[0,0],[0,0],[0,0]].

我知道 len(p) 返回列表的宽度,但是在这种情况下如何获得列表的高度为 3?

4

2 回答 2

5

没有列表的“高度”之类的东西。您可能的意思是“当我们选择将矩阵表示为列表列表时,矩阵的高度是多少”?(旁注:有很多方法可以表示矩阵。)

你可以拿第一行:

len(p[0])

但如果你有,你会遇到错误[],所以你想要的是:

len(p[0]) if len(p)!=0 else 0

(要记住的其他事项:如果可以接受 Nx0 矩阵表示为[[],[],[],...]。我会说不。你是[]如何表示空矩阵的?我会说是的。但是有些库喜欢numpy选择不同的:numpy.matrix([]).tolist()-->[[]]numpy.matrix([[],[],[]])- -> matrix([], shape=(3, 0), dtype=float64)。)

于 2012-06-04T04:59:12.610 回答
0

正如其他评论者和答案所提到的,对于什么是长度和高度并没有明确的定义。这一切都归结为测量多维数组的维度。

size_of_the_first_dimension = len(p) # length?
size_of_the_second_dimension = max([len(a) for a in p]) # height?
size_of_the_third_dimension = max([len(b) for a in p for b in a]) # depth?
size_of_the_fourth_dimension = max([len(c) for a in p for b in a for c in b]) # colour?

... 等等

一般来说,您可以通过如下函数测量第 n 个维度:

def measure(dimension,matrix,aggregator=max):
    if dimension <= 0:
        raise ValueError('dimension must be greater than 0')
    elif dimension == 1:
        return aggregator([len(x) for x in [matrix]])
    else:
        try:
            return aggregator([measure(dimension-1,x) for x in matrix])
        except TypeError:
            raise TypeError('matrix is not uniform or does not have %s dimensions' % dimension)

>>> measure(3,[[[1,2],[],[4]],[[3,4,5]],[[3,2],[],[1,2,3,4,5]],[[]]])
5

如果您对维度大小的定义不同,则max可以使用min或其他东西(作为第三个参数传入)。

于 2012-06-04T08:03:36.563 回答