# Filling in a tuple from unknown size list

Peter Otten __peter__ at web.de
Fri Nov 27 13:39:18 CET 2009

boblatest wrote:

> Hello all,
>
> normal nntp account.)
>
> Here's my question: Given a list of onknown length, I'd like to be
> able to do the following:
>
> (a, b, c, d, e, f) = list
>
> If the list has fewer items than the tuple, I'd like the remaining
> tuple elements to be set to "None". If the list is longer, I'd like
> the excess elements to be ignored.
>
> The code snippet below does what I want, I was just wondering if there
> was an interesting "Pythonic" way of expressing the same thing.
>
> Thanks,
> robert
>
> def iter_inf(li, n):
>     for i in range(n):
>         if i < len(li):
>             r = li[i]
>         else:
>             r = None
>         i += 1
>         yield r
>
>
> li = ['a', 'b', 'c']
> (a, b, c, d, e) =  iter_inf(li, 5)
> print a, b, c, d, e

Here's an alternative implementation that works with arbitrary iterables:

>>> from itertools import chain, repeat, islice
>>> a, b, c = islice(chain("a", repeat(None)), 3)
>>> a, b, c
('a', None, None)
>>> a, b, c = islice(chain("abcde", repeat(None)), 3)
>>> a, b, c
('a', 'b', 'c')

Peter