>>> 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
I don't get why doing a list += (something)
and list = list + (something)
does different things. Also, why does +=
split the string up into characters to be inserted into the list?
list.__iadd__()
can take any iterable; it iterates over it and adds each element to the list, which results in splitting a string into individual letters. list.__add__()
can only take a list.
aList += 'chicken'
is python shorthand for aList.extend('chicken')
. The difference between a += b
and a = a + b
is that python tries to call iadd
with +=
before calling add
. This means that alist += foo
will work for any iterable foo.
>>> 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
To solve your problem you need to be adding lists to lists, not strings to lists.
Try this:
a = []
a += ["chicken"]
a += ["dog"]
a = a + ["cat"]
Note they all work as expected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With