Ответ 1
list.__iadd__()
может принимать любые итерации; он выполняет итерацию по нему и добавляет каждый элемент в список, что приводит к разделению строки на отдельные буквы. list.__add__()
может принимать только список.
>>> 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
Я не понимаю, почему делать list += (something)
и list = list + (something)
делает разные вещи. Кроме того, почему +=
разделяет строку на символы, которые нужно вставить в список?
list.__iadd__()
может принимать любые итерации; он выполняет итерацию по нему и добавляет каждый элемент в список, что приводит к разделению строки на отдельные буквы. list.__add__()
может принимать только список.
aList += 'chicken'
является сокращением python для aList.extend('chicken')
. Разница между a += b
и a = a + b
заключается в том, что python пытается вызвать iadd
с помощью +=
перед вызовом add
. Это означает, что alist += foo
будет работать для любого итеративного 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
Чтобы решить вашу проблему, вам нужно добавлять списки в списки, а не строки в списки.
Попробуйте следующее:
a = []
a += ["chicken"]
a += ["dog"]
a = a + ["cat"]
Обратите внимание, что все они работают должным образом.