Unpack the first two elements in list/tuple

PythonUnpack

Python Problem Overview


Is there a way in Python to do like this:

a, b, = 1, 3, 4, 5

and then:

>>> a
1
>>> b
3

The above code doesn't work as it will throw

> ValueError: too many values to unpack

Python Solutions


Solution 1 - Python

Just to add to Nolen's answer, in Python 3, you can also unpack the rest, like this:

>>> a, b, *rest = 1, 2, 3, 4, 5, 6, 7
>>> a
1
>>> rest
[3, 4, 5, 6, 7]

Unfortunately, this does not work in Python 2 though.

Solution 2 - Python

There is no way to do it with the literals that you've shown. But you can slice to get the effect you want:

a, b = [1, 3, 4, 5, 6][:2]

To get the first two values of a list:

a, b = my_list[:2]

Solution 3 - Python

On Python 3 you can do the following:

>>> a, b, *_ = 1, 3, 4, 5
>>> a
1
>>> b
3

_ is just a place holder for values you don't need

Solution 4 - Python

You could use _ to represent variables you wanted to "throw away"

>>> a, b, _ = 1, 3, 4
>>> a
1
>>> b
3

Solution 5 - Python

Or in Python 3.x you could do this:

  a, *b = 1, 3, 4

giving you:

In [15]: a
Out[15]: 1

In [16]: b
Out[16]: [3, 4]

It would avoid the exception, though you would have to parse b. This assume that you only want to have two variables on the left of the =, otherwise you could use

a, b, *ignore = ....

with v3.x

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHanfei SunView Question on Stackoverflow
Solution 1 - PythonGustav LarssonView Answer on Stackoverflow
Solution 2 - PythonNed BatchelderView Answer on Stackoverflow
Solution 3 - PythonjamylakView Answer on Stackoverflow
Solution 4 - PythonNolen RoyaltyView Answer on Stackoverflow
Solution 5 - PythonLevonView Answer on Stackoverflow