Распаковка последовательностей в 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

Одно значение не может стать двумя.

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