Распаковка последовательностей в python
Я начал изучать python несколько недель назад (без каких-либо предварительных знаний в программировании) и перешел к следующей проблеме, связанной с распаковкой последовательностей, которая меня сильно смущает.
По какой-то причине, когда я пытаюсь это:
for b, c in [1,2]:
print b,c
Я получаю сообщение об ошибке:
Ошибка типа: объект 'int' не повторяется
То же самое происходит, когда я пытаюсь заменить список кортежем (1,2)
Но когда я пытаюсь сделать то же самое, просто с кортежем в списке:
for b, c in [(1,2)]:
print b,c
это работает - я получаю:
1 2
Это почему?
Спасибо.
кстати я использую Python 2.7
2 ответа
Каждый раз, когда вы делаете in <iterable>
Заявление, он выбирает один элемент из повторяемого и затем распаковывает его в соответствии с вашими потребностями, в вашем случае b, c
, Итак, в первом примере вы пытаетесь назначить b, c
в 1
что невозможно, тогда как в следующем примере вы делаете b, c = (1, 2)
которая успешно распаковывается и дает вам ab, c.
Например, попробуйте распечатать значения.
>>> for x in [1, 2]:
print "X: ", x
X: 1
X: 2
>>> for x in [(1, 2)]:
print "X: ", x
X: (1, 2)
Итак, присваивая b, c = 1
невозможно, тогда как назначение b, c = (1, 2)
возможно.
В Python, for
Цикл берет каждый элемент из итерируемого и присваивает его заданным именам перед каждым выполнением блока кода.
В первом случае Python берет первый элемент, 1
и пытается присвоить его b, c
- это не работает, так как присваивается только одно значение, следовательно, ошибка.
Во втором примере первое значение - это весь кортеж (1, 2)
- так что это может быть распаковано, так как оно содержит два обязательных значения.
Понятно, в чем проблема, когда вы помещаете это в контекст:
a, b = 1, 2
a, b = 1
Одно значение не может стать двумя.