p = [[0,0],[0,0],[0,0]].
len(p)がリストの幅を返すことは知っていますが、この場合は3であるリストの高さを取得するにはどうすればよいですか?
p = [[0,0],[0,0],[0,0]].
len(p)がリストの幅を返すことは知っていますが、この場合は3であるリストの高さを取得するにはどうすればよいですか?
リストの「高さ」のようなものはありません。「マトリックスをリストのリストとして表すことを選択した場合、マトリックスの高さはどれくらいですか」という意味ですか?(補足:行列を表す方法はたくさんあります。)
あなたは最初の行を取ることができます:
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)
。)
他のコメントや回答が述べているように、長さと高さの明確な定義は実際にはありません。それはすべて、多次元配列の次元を測定することに要約されます。
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
ディメンションのサイズの定義が異なる場合は、代わりに、または他の何か(3番目の引数として渡される)をmax
使用できます。min