¿Por qué agregar cosas a una lista hace cosas diferentes?

>>> aList = [] >>> aList += 'chicken' >>> aList ['c', 'h', 'i', 'c', 'k', 'e', 'n'] >>> aList = aList + 'hello' Traceback (most recent call last): File "", line 1, in  aList = aList + 'hello' TypeError: can only concatenate list (not "str") to list 

No entiendo por qué hacer una list += (something) y list = list + (something) hace cosas diferentes. Además, ¿por qué += divide la cadena en caracteres para insertar en la lista?

list.__iadd__() puede tomar cualquier iterable; itera sobre él y agrega cada elemento a la lista, lo que resulta en la división de una cadena en letras individuales. list.__add__() solo puede tomar una lista.

aList += 'chicken' es la abreviatura de python para aList.extend('chicken') . La diferencia entre a += b y a = a + b es que Python intenta llamar a iadd con += antes de llamar a add . Esto significa que alist += foo funcionará para cualquier foo iterable.

 >>> a = [] >>> a += 'asf' >>> a ['a', 's', 'f'] >>> a += (1, 2) >>> a ['a', 's', 'f', 1, 2] >>> d = {3:4} >>> a += d >>> a ['a', 's', 'f', 1, 2, 3] >>> a = a + d Traceback (most recent call last): File "", line 1, in  TypeError: can only concatenate list (not "dict") to list 

Para resolver su problema, debe agregar listas a listas, no cadenas a listas.

Prueba esto:

 a = [] a += ["chicken"] a += ["dog"] a = a + ["cat"] 

Tenga en cuenta que todos funcionan como se esperaba.