Is there a zip-like function that pads to longest length?
In Python 3 you can use itertools.zip_longest
>>> list(itertools.zip_longest(a, b, c))[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
You can pad with a different value than None
by using the fillvalue
parameter:
>>> list(itertools.zip_longest(a, b, c, fillvalue='foo'))[('a1', 'b1', 'c1'), ('foo', 'b2', 'c2'), ('foo', 'b3', 'foo')]
With Python 2 you can either use itertools.izip_longest
(Python 2.6+), or you can use map
with None
. It is a little known feature of map
(but map
changed in Python 3.x, so this only works in Python 2.x).
>>> map(None, a, b, c)[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
For Python 2.6x use itertools
module's izip_longest
.
For Python 3 use zip_longest
instead (no leading i
).
>>> list(itertools.izip_longest(a, b, c))[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]