/ / ako nájsť výšku zoznamu python - python, zoznam, multidimenzionálne pole

ako nájsť výšku zoznamu python - python, zoznamu, multidimenzionálneho poľa

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

Viem, že len (p) vracia šírku zoznamu, ale ako dostanem výšku zoznamu, ktorý je v tomto prípade 3?

odpovede:

5 pre odpoveď č. 1

Neexistuje žiadna taká vec ako "výška" zoznamu. Pravdepodobne to znamená "keď sa rozhodneme reprezentovať maticu ako zoznam zoznamov, aká je výška matice"? (sidenote: Existuje mnoho spôsobov, ako reprezentovať matice.)

Môžete si vziať prvý riadok:

len(p[0])

ale vy ste sa dostali do omylu, ak ste mali [], takže to, čo chcete, je:

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

(Iné veci, ktoré treba mať na pamäti: ak je to prijateľné mať maticu reprezentovanú Nx0 [[],[],[],...], Ja hovorím nie [] ako reprezentujete prázdne matice? I "d povedať áno. Avšak niektoré knižnice ako numpy vybrali sa inak: numpy.matrix([]).tolist()->[[]] a numpy.matrix([[],[],[]])->matrix([], shape=(3, 0), dtype=float64).)


0 pre odpoveď č. 2

Ako už spomínali iní komentátori a odpovede, nie je tu žiadna jasná definícia toho, čo je dĺžka a výška.

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?

... a tak ďalej

Vo všeobecnosti môžete n-tú dimenziu merať pomocou funkcie, ako napríklad:

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

Namiesto max môžete použiť min alebo niečo iné (odovzdané ako tretí argument), ak je vaša definícia veľkosti dimenzie odlišná.