Распаковать первые два элемента в списке/кортеже

Есть ли способ в python сделать вот так:

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

И затем:

>>> a
1
>>> b
3

(Вышеприведенный код не работает, поскольку он бросает ValueError: too many values to unpack.)

5 ответов

Чтобы добавить к Nolen ответ, в Python 3 вы также можете распаковать остальные, например:

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

К сожалению, в Python 2 это не работает.


Нет никакого способа сделать это с литералами, которые вы показали. Но вы можете нарезать, чтобы получить желаемый эффект:

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

Если ваш фактический код пытается получить первые два значения списка (например), вот как вы это сделаете:

a, b = my_list[:2]


В Python 3 вы можете сделать следующее:

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

_ является просто владельцем места для значений, которые вам не нужны.


Вы можете использовать _ для представления переменных, которые вы хотели "выбросить"

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


Или в Python 3.x вы можете сделать это:

a, *b = 1, 3, 4

дает вам:

In [15]: a
Out[15]: 1
In [16]: b
Out[16]: [3, 4]

Это позволит избежать исключения, хотя вам придется разбирать b. Предположим, что вы хотите иметь две переменные слева от =, иначе вы могли бы использовать

a, b, *ignore = ....

с v3.x

licensed under cc by-sa 3.0 with attribution.