Python:Рецепты/Распаковка последовательности в отдельные переменные

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.


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

Задача

Дана последовательность из N-элементов, которую необходимо распаковать в N-переменных.

Решение

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

Пример

№1

1 p1 = (1,2,3)
2 a, b, c = p1

Результат:

1 >>> a
2 1
3 >>> b
4 2
5 >>> c
6 3
7 >>> p1
8 (1, 2, 3)

№2

1 p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
2 site, inum, fnum, date = p2

Результат:

 1 >>> site
 2 'WIKIHANDBK'
 3 >>> inum
 4 10
 5 >>> fnum
 6 100.9
 7 >>> date
 8 (15, 4, 2020)
 9 >>> p2
10 ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]

№3

1 p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
2 site, inum, fnum, (day, month, year) = p2

Результат:

 1 >>> site
 2 'WIKIHANDBK'
 3 >>> inum
 4 10
 5 >>> fnum
 6 100.9
 7 >>> day
 8 15
 9 >>> month
10 4
11 >>> year
12 2020
13 >>> p2
14 ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]

№4

При не совпадении количества элементов будет сгенерировано исключение:

1 p1 = (1,2,3)
2 a, b = p1

Результат:

1 >>> a,b = p1
2 Traceback (most recent call last):
3   File "<pyshell#31>", line 1, in <module>
4     a,b = p1
5 ValueError: too many values to unpack (expected 2)
1 p1 = (1,2,3)
2 a,b,c,d = p1

Результат:

1 >>> a,b,c,d = p1
2 Traceback (most recent call last):
3   File "<pyshell#32>", line 1, in <module>
4     a,b,c,d = p1
5 ValueError: not enough values to unpack (expected 4, got 3)
6 >>>

№5

Распаковка работает с любым итерируемым объектом:

1 s = 'hello'
2 a,b,c,d,e = s

Результат:

 1 >>> a
 2 'h'
 3 >>> b
 4 'e'
 5 >>> c
 6 'l'
 7 >>> d
 8 'l'
 9 >>> e
10 'o'

№6

При распаковке, иногда необходимо отбросить некоторые значения. Для этого нет специального синтаксиса, но можно просто использовать переменные, которые вы потом отбросите:

1 p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
2 _, _, _, date = p2

Результат:

1 >>> date
2 (15, 4, 2020)

См.также

Внешние ссылки