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

Tôi không hiểu tại sao làm một số list += (something)list = list + (something) có những thứ khác nhau. Ngoài ra, tại sao += chia chuỗi thành các ký tự để chèn vào danh sách?Tại sao việc thêm vào danh sách lại làm những việc khác nhau?

+2

Một câu hỏi tương tự khác http://stackoverflow.com/q/9766387/776084. – RanRag

+0

@agf: không, câu hỏi đó là về '+ =' so với '+' khi đối mặt với nhiều tham chiếu đến cùng một danh sách. –

+0

Không hoàn toàn giống với bản sao của tôi. –

Trả lời

5

list.__iadd__() có thể thực hiện bất kỳ lần lặp nào; nó lặp lại qua nó và thêm từng phần tử vào danh sách, dẫn đến việc tách một chuỗi thành các chữ cái riêng lẻ. list.__add__() chỉ có thể lấy danh sách.

+0

cảm ơn sự giúp đỡ! – kkSlider

5

aList += 'chicken' là viết tắt python cho aList.extend('chicken'). Sự khác biệt giữa a += ba = a + b là python cố gọi iadd với += trước khi gọi add. Điều này có nghĩa là alist += foo sẽ hoạt động với mọi foo có thể lặp lại.

>>> 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

Để giải quyết vấn đề của bạn, bạn cần phải thêm danh sách vào danh sách, không phải là chuỗi vào danh sách.

Hãy thử điều này:

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

Lưu ý chúng đều hoạt động như mong đợi.

+0

Không, dưới dạng _iterable_ của 'str'ings. – agf

Các vấn đề liên quan