2012-04-13 47 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 

我不明白爲什麼做list += (something)list = list + (something)做不同的事情。另外,爲什麼+=將字符串拆分成要插入列表的字符?爲什麼添加到列表中會做不同的事情?

+2

另一個類似的問題http://stackoverflow.com/q/9766387/776084。 – RanRag 2012-04-13 23:41:46

+0

@agf:不,這個問題是關於'+ ='與'+'在面對同一個列表的多個引用。 – 2012-04-13 23:52:14

+0

對我來說看起來不太像。 – 2012-04-13 23:52:21

回答

5

list.__iadd__()可以採取任何可迭代;它遍歷它並將每個元素添加到列表中,這會導致將字符串拆分爲單個字母。 list.__add__()只能列表。

+0

感謝您的幫助! – kkSlider 2012-04-15 07:26:42

5

aList += 'chicken'是python的簡寫爲aList.extend('chicken')a += ba = a + b之間的區別在於python在調用add之前嘗試調用iadd+=。這意味着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 
1

要解決您的問題,您需要將列表添加到列表中,而不是將列表添加到列表中。

試試這個:

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

注意他們作爲一切工作的預期。

+0

不,作爲''的可持續發展。 – agf 2012-04-13 23:49:24

相關問題