You can create ndarray with the necessary sizes and easily read your list. Since your list is not complete, you should catch an IndexError that can be done in a try / exception block.
Using numpy.ndenumerate makes it easy to expand to a larger size (by adding more indices i,j,k,l,m,n,... to the for loop below):
import numpy as np test = [ [ ["header1","header2"], ["---"], [], ["item1","value1"] ], [ ["header1","header2","header3"], ["item2","value2"], ["item3","value3","value4","value5"] ] ] collector = np.empty((2,4,4),dtype='|S20') for (i,j,k), v in np.ndenumerate( collector ): try: collector[i,j,k] = test[i][j][k] except IndexError: collector[i,j,k] = '' print collector #array([[['header1', 'header2', '', ''], # ['---', '', '', ''], # ['', '', '', ''], # ['item1', 'value1', '', '']], # [['header1', 'header2', 'header3', ''], # ['item2', 'value2', '', ''], # ['item3', 'value3', 'value4', 'value5'], # ['', '', '', '']]], dtype='|S10')