2011-09-16 53 views
0

這就是我剛纔在Python Shell做的:試試這個:list.extend /追加

>>>[1, 2] 
...[1, 2] 
>>>[1, 2].extend([2,3]) #when I pressed Enter 
>>> 

       #nothing came out 

然後,我嘗試別的東西:

>>>l = [1, 2] 
>>>l 
...[1, 2] 
>>>m = [1, 2].extend([2, 3]) 
>>>m      #pressed Enter, nothing came out 
>>>m is None 
...True 

爲什麼呢? 是否意味着我不能做類似

>>>m = [...].extend(...) 

+1

list.extend修改列表** in place **。 – jsz

+0

而且當一個可變對象被修改** in place **時,函數的返回值是None。不是一個新對象。 –

回答

5

不,你不能,extend(如append,pop ...)修改對象就地而不返回任何東西。

列表對象是可變對象,它們可以在不需要重新創建的情況下進行修改。

你的情況,你所要做的

>>>l = [1,2] 
>>>l.extend([2,3]) 
>>>l 
[1,2,2,3] 

如果更改的l類型,假設這是另一個對象,姑且稱之爲class Foo,你會想到像

的東西返回值
foo = Foo() 
foo.modify_object("here are modifications") 

你會不會期望像foo對象那樣被修改,並且沒有任何方法返回?

+0

但我想知道爲什麼「m = [1,2] .extend([1])」那麼m是無? – Alcott

+0

因爲這就是'extend'返回的結果。 –

+0

@Alcott:我添加了一個與列表不同的其他示例 –

2

你總是可以做m = [...] + [...]。

0
>>> l = [1, 2] 
>>> l.extend([2, 3]) 
>>> l 
[1, 2, 2, 3] 
>>> 

幾乎所有的列表操作修改的地方,例如列表

>>> m = [1, 2, 5, 6, 7, 1, 2, 4] 
>>> m.sort() 
>>> m 
[1, 1, 2, 2, 4, 5, 6, 7]