Filling in a tuple from unknown size list
Peter Otten
__peter__ at web.de
Fri Nov 27 07:39:18 EST 2009
boblatest wrote:
> Hello all,
>
> (sorry for posting from Google. I currently don't have access to my
> 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
More information about the Python-list
mailing list