Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: unpacking first few items of iterable

Reply
Thread Tools

Re: unpacking first few items of iterable

 
 
Terry Reedy
Guest
Posts: n/a
 
      12-13-2012
On 12/13/2012 3:09 PM, MRAB wrote:
> On 2012-12-13 19:37, Daniel Fetchinson wrote:
>> Hi folks, I swear I used to know this but can't find it anywhere:
>>
>> What's the standard idiom for unpacking the first few items of an
>> iterable whose total length is unknown?


An hinted by some of the answers, this is not a complete specification.

>> Something like
>>
>> a, b, c, _ = myiterable
>>
>> where _ could eat up a variable number of items, in case I'm only
>> interested in the first 3 items?


The literal answer given by demian, a,b,c,*_=iterable, has some good
uses but fails on an infinite iterable, and otherwise exhausts iterators
and creates a potentially long sequence that, by the specification, is
not needed. Mitya's alternative of slicing, seq[:3] requires a directly
sliceable sequence rather than just an iterable.

> You could do this:
>
> from itertools import islice
> a, b, c = islice(myiterable, 3)


This works for any iterable and the only discarded temporary is a
sequence of three items (needed so either all bindings work or none are
made).

If you want to bind a default values if iterable has less than 3 values,
one way is

>>> a,b,c = itertools.islice(itertools.chain(itertools.islice( (1,2),

3), [None]*3), 3)
>>> a,b,c

(1, 2, None)

Perhaps clearer is

>>> a,b,c = [None]*3
>>> it = iter((1,2))
>>> try:

a = next(it)
b = next(it)
c = next(it)
except StopIteration:
pass

>>> a,b,c

(1, 2, None)

This has the advantage that if iterable has more than 3 items, 'it' is
available to iterate over the rest. This is the standard idiom for
removing a couple of special items before iterating over the remainder
(when one does not want the remainder as a concrete list).

--
Terry Jan Reedy

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: unpacking first few items of iterable Mitya Sirenef Python 0 12-13-2012 08:28 PM
Re: unpacking first few items of iterable Daniel Fetchinson Python 0 12-13-2012 08:09 PM
Re: unpacking first few items of iterable MRAB Python 0 12-13-2012 08:09 PM
Re: unpacking first few items of iterable Demian Brecht Python 0 12-13-2012 07:39 PM
unpacking first few items of iterable Daniel Fetchinson Python 0 12-13-2012 07:37 PM



Advertisments