# python – Is there a zip-like function that pads to longest length?

## python – 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` modules `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)]
``````

#### python – Is there a zip-like function that pads to longest length?

non itertools Python 3 solution:

``````def zip_longest(*lists):
def g(l):
for item in l:
yield item
while True:
yield None
gens = [g(l) for l in lists]
for _ in range(max(map(len, lists))):
yield tuple(next(g) for g in gens)
``````