2012-07-04 33 views
1

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

+5

列表是*始终*一维的。 –

+4

列表是* not * arrays:(嵌套)列表中的条目不必是相同的结构。 '[a,[b,c]]'是一个合法名单,但并不具有维度。 –

回答

3

假设均匀度:

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

希望帮助

+0

谢谢,它完美的作品。 –

+1

乐意提供帮助。如果你喜欢答案,考虑upvoting /接受 – inspectorG4dget

+0

'和矩阵不是None'有什么意义? – georg

7

对于一个简单的列表,你可以得到它的长度与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 

相反的iterable你可以做isinstance(x, list)或任何其他检查你想要的。编辑排除字符串以避免dimensionality('lol')无限循环。

+1

也许OP意味着维数。 – JBernardo

+2

'维度('哈哈')' - >无限循环。确保排除字符串。 – JBernardo

+0

@JBernardo:好点,ty – Claudiu

相关问题