itertools.izip_longest() takes a fillvalue argument. On Python 3, it itertools.zip_longest() .
>>> l = [[1,2,3], [4,5], [], [6,7,8,9]] >>> import itertools >>> list(itertools.izip_longest(*l, fillvalue="")) [(1, 4, '', 6), (2, 5, '', 7), (3, '', '', 8), ('', '', '', 9)]
If you need sublists instead of tuples:
>>> [list(tup) for tup in itertools.izip_longest(*l, fillvalue="")] [[1, 4, '', 6], [2, 5, '', 7], [3, '', '', 8], ['', '', '', 9]]
Of course, this also works for strings:
>>> l = [['a','b','c'], ['d','e'], [], ['f','g','h','i']] >>> import itertools >>> list(itertools.izip_longest(*l, fillvalue="")) [('a', 'd', '', 'f'), ('b', 'e', '', 'g'), ('c', '', '', 'h'), ('', '', '', 'i')]
It even works like this:
>>> l = ["abc", "de", "", "fghi"] >>> list(itertools.izip_longest(*l, fillvalue="")) [('a', 'd', '', 'f'), ('b', 'e', '', 'g'), ('c', '', '', 'h'), ('', '', '', 'i')]