def shape( lst) :
def ishape( lst) :
shapes = [ ishape( x) if isinstance ( x, list ) else [ ] for x in lst]
shape = shapes[ 0 ]
if shapes.count ( shape) != len ( lst) :
raise ValueError ( 'Ragged list' )
shape.append ( len ( lst) )
return shape
return tuple ( reversed ( ishape( lst) ) )
print ( shape( [ 1 , 2 , 3 , 4 , 5 , 6 ] ) )
print ( shape( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ) )
print ( shape( [ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] ] ) )
print ( shape( [ [ [ 1 , 2 , 3 , 4 , 5 , 6 ] ] ] ) )
print ( shape( [ [ [ 1 , 2 ] , [ 3 , 4 ] ] , [ [ 5 , 6 ] , [ 7 , 8 ] ] ] ) )
print ( shape( [ [ 1 , 2 , 3 ] , [ 4 , 5 ] ] ) )
ZGVmIHNoYXBlKGxzdCk6CiAgICBkZWYgaXNoYXBlKGxzdCk6CiAgICAgICAgc2hhcGVzID0gW2lzaGFwZSh4KSBpZiBpc2luc3RhbmNlKHgsIGxpc3QpIGVsc2UgW10gZm9yIHggaW4gbHN0XQogICAgICAgIHNoYXBlID0gc2hhcGVzWzBdCiAgICAgICAgaWYgc2hhcGVzLmNvdW50KHNoYXBlKSAhPSBsZW4obHN0KToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmFnZ2VkIGxpc3QnKQogICAgICAgIHNoYXBlLmFwcGVuZChsZW4obHN0KSkKICAgICAgICByZXR1cm4gc2hhcGUKICAgIHJldHVybiB0dXBsZShyZXZlcnNlZChpc2hhcGUobHN0KSkpCgpwcmludChzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0pKQpwcmludChzaGFwZShbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSkKcHJpbnQoc2hhcGUoW1sxLCAyXSwgWzMsIDRdLCBbNSwgNl1dKSkKcHJpbnQoc2hhcGUoW1tbMSwgMiwgMywgNCwgNSwgNl1dXSkpCnByaW50KHNoYXBlKFtbWzEsIDJdLCBbMywgNF1dLCBbWzUsIDZdLCBbNywgOF1dXSkpCnByaW50KHNoYXBlKFtbMSwgMiwgM10sIFs0LCA1XV0pKQ==
stdout
(6,)
(2, 3)
(3, 2)
(1, 1, 6)
(2, 2, 2)
stderr
Traceback (most recent call last):
File "./prog.py", line 16, in <module>
File "./prog.py", line 9, in shape
File "./prog.py", line 6, in ishape
ValueError: Ragged list