2013-07-15 23 views
1

Вот три примера на самом деле.TypeError: объект 'int' не является итерируемым, почему это происходит

>>> result = [] 
>>> for k in range(10): 
>>> result += k*k 

>>> result = [] 
>>> for k in range(10): 
>>> result.append(k*k) 

>>> result = [k*k for k in range(10)] 

Первый совершил ошибку. Ошибка печатается, как показано ниже

TypeError: 'int' object is not iterable 

Однако второй и третий работают хорошо.

Я не мог понять разницу между этими тремя утверждениями.

+0

Относительно: [Когда «i + = x» отличается от «i = i + x» в Python?] (Http://stackoverflow.com/questions/15376509/when-is-ix-different-from- IIx-в-питон) –

ответ

7

Добавление на месте объекта списка расширяет список с элементами итерации. k*k не является итерируемым, поэтому вы не можете «добавить» его в список.

Вам нужно сделать k*k итератора:

result += [k*k] 
4

result список объектов (без записей, на начальном этапе).

Оператор += в основном такой же, как и его метод extend на все, что находится справа. (Существуют некоторые незначительные отличия, которые здесь не актуальны, но см. В файле python2 programming FAQ.) Метод extend для списка пытается перебрать по (одиночному) аргументу, а int не является итерируемым.

(Между тем, конечно, метод append просто добавляет свой (единственный) аргумент, так что это прекрасно работает. Понимание списков совершенно иное и является наиболее эффективным методом, поскольку построение списков выполняется с гораздо меньшим внутренняя суетливость.)

0

Вы повторяете целое число, а не строку или последовательность. Для result += k*k, только если k было вводом строки/последовательности, то оно было бы истинным, но если k является числом, результатом будет продолжение суммирования. Для result.append(k*k), является ли k строкой или номером, результат получает последовательные дополнения.

Смежные вопросы