Как распаковать последовательность?

Почему я не могу этого сделать:

d = [x for x in range(7)] 
a, b, c, d, e, f, g = *d

Где можно распаковать? Только между скобками функции?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
0
1 521
3

Ответы 3

Вы неправильно используете Extended Iterable Unpacking.

d = [x for x in range(7)]  
a, b, c, d, e, f, g = d
print(a, b, c, d, e, f, g)

Where it's possible to unpack? Only between parentheses of a function?

Нет,

* предлагает изменить синтаксис итеративной распаковки, позволяя указать «универсальное» имя, которому будет назначен список всех элементов, не присвоенных «обычному» имени.

Вы можете попробовать что-то вроде этого:

a, *params = d
print(params)

Выход

[1, 2, 3, 4, 5, 6]

Обычно оператор * (Расширенная итерируемая распаковка) используется, когда вам нужно передать параметры функции.

Примечание

Javascript-эквивалент Расширенная итерируемая распаковкаoperator называется синтаксис распространения.

d = [...Array(7).keys()]
console.info(d)

var [a, ...b] = d
console.info(a,b)

Итак, почему это правильно: t = 1, * rest, а это не: t = * rest? Первый всегда автоматически создает кортеж?

user9441447 02.05.2018 11:46

t будет содержать значение для первого элемента d, а остальные значения будут упакованы в переменную rest.

Mihai Alexandru-Ionut 02.05.2018 11:48

Упакованный процесс будет производиться в левой части задания.

Mihai Alexandru-Ionut 02.05.2018 11:49

но после печати 't' я получаю все значения, а не только первое: (1, 2, 3), rest = [2, 3] t = 1, * rest print (t)

user9441447 02.05.2018 11:51

Кажется, вам не нужен *

>>> z = [x for x in range(7)]
>>> a,b,c,d,e,f,g = z
>>> a
0
>>> b
1
>>> c
2
>>> 

(Я использовал z, а не d дважды.)

Да, вы правы, я не заметил эту двойную букву «d».

user9441447 02.05.2018 11:29

Н.П. Двойная буква d - не причина неудачной распаковки. Также вам на самом деле не нужна вспомогательная переменная: a,b,c,d,e,f,g = range(7) работает, потому что распаковка работает с итерациями.

user3456014 02.05.2018 11:31

Да, я понимаю, но двойное использование одного и того же идентификатора - не лучшая практика.

user9441447 02.05.2018 11:36

Вы также можете использовать это:

>>> a,b,c,d,e,f,g = range(7)
>>> a
0
>>> b
1
>>> c
2

извините мое плохое, диапазон должен быть (7). этот будет работать: a, b, c, d, e, f, g = range (7)

akjprajapati 02.05.2018 11:40

Я позабочусь об этом, спасибо за руководство @ PM2Ring

akjprajapati 02.05.2018 11:43

Другие вопросы по теме