Извлечение вложенных структур данных с помощью цикла for на Python

Допустим есть вот такой кортеж:

>>> a = ([1,2],[3,4])

Извлечь из него вложенные списки очень просто:

>>> for i in a:
	print (i)
 
 
[1, 2]
[3, 4]

А вот при таком варианте извлекаются отдельные элементы:

>>> for i,j in a:
	print (i,'--',j)
 
 
1 -- 2
3 -- 4

Т.е. пара i и j действует как единица, сначала связываясь с первым вложенным списком, затем со вторым.
Что будет, если количество элементов во вложенных списках не одинаково?

>>> b = ([1,2],[3,4,5])
>>> for i,j in b:
	print(i,j)
 
 
1 2
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    for i,j in b:
ValueError: too many values to unpack (expected 2)
>>> for i,j,k in b:
	print(i,j,k)
 
 
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    for i,j,k in b:
ValueError: need more than 2 values to unpack

Возникает ошибка ValueError: слишком много значений к распаковке (ожидается 2) или требуется больше 2 значений к распаковке. Выйти из положения можно путем использования вложенного цикла for:

>>> for i in b:
	for j in i:
		print(j,end=' ')
 
 
1 2 3 4 5 

Более интересный пример, который поможет понять, как работает функция os.walk():

>>> d = [('string',[1,2,3,4],[5,6,7]),('string2',[11],[0,12,13,14,15])]
>>> for i,j,k in d:
	print(i,'--',j,'--',k)
 
 
string -- [1, 2, 3, 4] -- [5, 6, 7]
string2 -- [11] -- [0, 12, 13, 14, 15]
>>> c = []
>>> for i,j,k in d:
	for n in k:
		c.append(n)
 
 
>>> c
[5, 6, 7, 0, 12, 13, 14, 15]

Внешний цикл for делает две итерации, т.к. в списке d два элемента (в данном случае, кортежа). При каждой итерации переменная i связывается с первым элементом очередного кортежа, переменная j – со вторым, а k – с третьим.

  Определение вхождения элемента в последовательность на Python
Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x