[Python-ideas] Unpack of sequences

Steven D'Aprano steve at pearwood.info
Fri Aug 31 03:03:45 CEST 2012


On 31/08/12 10:17, Greg Ewing wrote:
> Mike Graham wrote:
>> That being said, `a, b, c, *_ = d` or similar is probably better than
>> introducing a new way.
>
> It's inefficient, though, because it results in iterating
> over the remainder of the sequence and building a new sequence
> that will never be used.

And if the sequence is large, that might even matter.

I'm not being quite as dismissive as it might sound, but in practice,
this inefficiency generally does not matter. It's unlikely to be a
bottleneck.


> There's currently no way to spell the most efficient way of
> doing this, which is simply to stop iterating and ignore the
> rest of the sequence.

For sequences:

a, b, c, d = really_long_sequence[:4]


which might not be as efficient as possible, but by estimation
it is within a factor of two of the most efficient as possible.


For iterators, use itertools.islice.


>There's also no way to unpack the
> head of an infinite sequence without slicing it first.


Surely this is the obvious way?

head = next(sequence)  # actually an iterator



-- 
Steven



More information about the Python-ideas mailing list