2

プログラムでリストの次元を決定するにはどうすればよいですか?ありがとう。

4

2 に答える 2

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')無限ループを回避するために文字列を除外するように編集されました。

于 2012-07-04T03:28:48.240 に答える
4

均一性を仮定すると:

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

お役に立てば幸い

于 2012-07-04T03:32:47.323 に答える