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

28

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

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

А потом:

>>> a
1
>>> b
3

(Приведенный выше код не работает, так какValueError: too many values to unpack.)

В Python2? или Python3? Пожалуйста, отметьте соответственно. Предполагая Python2 smci

Ваш Ответ

5   ответов
0

Или в 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

14

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

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

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

2

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

>>> a, b, _ = 1, 3, 4
>>> a
1
>>> b
3
Спасибо! но это не сработает, когда будет больше элементаa,b,_ = 1,3,4,5 Hanfei Sun
Этот метод работает хорошо, если вы не получаете явный срез, например(x,_,z,h) = coord вместо(x,z,h) = coord[:1]+coord[2:], Для больших кортежей, вы в конечном итоге с такими вещами, как(_,_,c,_,e,f,_) = something, что, возможно, лучше, чем беспорядок доступа к индексу.
@ Вы стреляете из ружья, вы должны сделать что-то вродеa, b, _, _ = 1, 3, 4, 5 которая становится ужасно быстрой Честно говоря, я думаю, просто получить список и использовать[:2] имеет больше смысла и является более питоническим.
44

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

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

Чтобы получитьfirst two значения списка:

a, b = my_list[:2]
+1, хотя ОП сказал, что он это уже знал, но, похоже, это отредактировано.
65

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

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

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

Похожие вопросы