2012-04-13 12 views
13
>>> aList = [] 
>>> aList += 'chicken' 
>>> aList 
['c', 'h', 'i', 'c', 'k', 'e', 'n'] 
>>> aList = aList + 'hello' 


Traceback (most recent call last): 
    File "<pyshell#16>", line 1, in <module> 
    aList = aList + 'hello' 
TypeError: can only concatenate list (not "str") to list 

No entiendo por qué hacer un list += (something) y list = list + (something) hace cosas diferentes. Además, ¿por qué += divide la cadena en caracteres que se insertarán en la lista?¿Por qué agregar cosas a una lista hace cosas diferentes?

+2

Otra pregunta similar http://stackoverflow.com/q/9766387/776084. – RanRag

+0

@agf: no, esa pregunta es sobre '+ =' vs. '+' frente a múltiples referencias a la misma lista. –

+0

No parece un duplicado para mí. –

Respuesta

5

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.

+0

gracias por la ayuda! – kkSlider

5

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 al 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 "<input>", line 1, in <module> 
TypeError: can only concatenate list (not "dict") to list 
1

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

Prueba esto:

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

Nota todos ellos funcionan como se esperaba.

+0

No, como un _iterable_ de 'str'ings. – agf

Cuestiones relacionadas