The textbook examples of multiple unpacking assignment are something like:
import numpy as NP M = NP.arange(5) a, b, c, d, e = M # so of course, a = 0, b = 1, etc. M = NP.arange(20).reshape(5, 4) # numpy 5x4 array a, b, c, d, e = M # here, a = M[0,:], b = M[1,:], etc. (ie, a single row of M is assigned each to a through e)
(My question is not
numpy specific. Indeed, I would prefer a pure Python solution.)
For the piece of code I’m looking at now, I see two complications on that straightforward scenario:
I usually won’t know the shape of M; and
I want to unpack a certain number of
items (definitely less than all items), and
I want to put the remainder into a single
So back to the 5×4 array above, what I would very much like to do is assign the first three rows of M to a, b, and c respectively (exactly as above), and the rest of the rows (I have no idea how many there will be, just some positive integer) to a single container,
all_the_rest = .
Python 3.x can do this easily:
a, b, *c = someseq
Python 2.x needs a bit more work:
(a, b), c = someseq[:2], someseq[2:]
Syntax for this is added to Python 3
# Python 3.x only a, b, *c = range(10) a 0 b 1 c [2, 3, 4, 5, 6, 7, 8, 9]
but no similar solution exists in Python 2.
You can of course do
range(10) s [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (a, b, c), rest = s[0:3], s[3:] a 0 b 1 c 2 rest [3, 4, 5, 6, 7, 8, 9]s =
or other similar solutions.