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

我不明白为什么要做 alist += (something)list = list + (something)做不同的事情。另外,为什么要将+=字符串拆分为要插入到列表中的字符?

4

3 回答 3

5

list.__iadd__()可以采用任何可迭代的;它对其进行迭代并将每个元素添加到列表中,从而将字符串拆分为单个字母。list.__add__()只能拿一个清单。

于 2012-04-13T23:35:44.210 回答
5

aList += 'chicken'是 python 的简写aList.extend('chicken')a += b和之间的区别在于python 在调用之前a = a + b尝试调用iaddwith 。这意味着这将适用于任何可迭代的 foo。+=addalist += 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
于 2012-04-13T23:35:58.790 回答
1

要解决您的问题,您需要将列表添加到列表中,而不是将字符串添加到列表中。

尝试这个:

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

请注意,它们都按预期工作。

于 2012-04-13T23:39:22.327 回答