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

もう1つの同様の質問http://stackoverflow.com/q/9766387/776084 – RanRag

+0

@agf:いいえ、その質問は、同じリストに対する複数の参照に直面して、 '+ ='と '+'についてです。 –

+0

私には重複しているようには見えません。 –

答えて

5

list.__iadd__()は任意の反復可能性を取ります。それを反復して各要素をリストに追加します。その結果、文字列が個々の文字に分割されます。 list.__add__()はリストを取ることしかできません。

+0

助けてくれてありがとう! – kkSlider

5

aList += 'chicken'は、aList.extend('chicken')のpythonの短縮形です。 a += ba = a + bの違いは、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

いいえ、 'str'の_iterable_です。 – agf

関連する問題