2011-06-14 141 views
46

我有一個列表:如何追加到空列表的末尾?

list1=[] 

列表的長度是不確定的,所以我想追加對象列表1中像這樣的結尾:

for i in range(0, n): 

    list1=list1.append([i]) 

但我的輸出一直給這個錯誤:AttributeError:'NoneType'對象沒有屬性'append'

這是因爲list1從一個空列表開始?我如何解決這個錯誤?

+25

否-1請。 append()返回None的事實可以欺騙beginers。問題是真的。 – 2011-06-14 07:26:57

回答

47

append其實變化的清單。此外,它需要一個項目,而不是一個列表。因此,所有你需要的是

for i in range(n): 
    list1.append(i) 

(順便說一句,請注意,您可以使用range(n),在這種情況下)。

我假設你的實際使用是比較複雜的,但你可以使用列表理解,這是本更Python:

list1 = [i for i in range(n)] 

或者說,在這種情況下,在Python 2.x的range(n)其實創建要已名單,雖然在Python 3.x中,你需要list(range(n))

+0

謝謝最後一點是非常有幫助的,並縮短了我的代碼 – LostLin 2011-06-14 15:45:43

+0

@AndrewJaffe,那麼列表的列表呢? – 2014-05-15 09:12:57

+1

這取決於你想要做什麼。 'append'添加到最外層的列表中,但你可以通過索引來附加到嵌套列表:'a [-1] .append(3)'將'3'附加到'a'的最後一個子列表。 – 2014-05-15 11:27:30

13

您不需要賦值運算符。追加返回無。

+4

s /不需要/不應該使用/ – 2011-06-14 04:59:50

+0

void在Python中不存在。 void實際上沒有 – 2011-06-14 08:55:39

2

append返回無,所以在第二次迭代中,您將調用NoneType的方法append。只是刪除了分配:

for i in range(0, n): 
    list1.append([i]) 
0

就像米高拉說,append()返回一個空,是因爲追加函數返回一個nonetype每次迭代你設置列表1到nonetype。在下一次迭代中,list1爲空,所以你試圖調用null的append方法。空值沒有方法,因此你的錯誤。

4

米科拉有正確的答案,但多一點解釋。它將首次運行,但由於append返回None,在for循環的第一次迭代之後,您的賦值將導致list1等於None,因此在第二次迭代中會引發錯誤。

0

請注意,您還可以使用插入爲了把數字到需要的位置列表中:

initList = [1,2,3,4,5] 
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5] 

而且也注意到,在Python中,你可以使用方法LEN()

總是得到一個列表的長度
1

我個人比較喜歡比append+操作:

for i in range(0, n): 

    list1 += [[i]] 

但這每次創建一個新的列表,所以如果性能非常關鍵,這可能不是最好的。

-1

使用my_list.append(...) 並且不要使用其他列表來追加,因爲列表是可變的。

+2

這個答案很難理解(例如,我不確定你的第二部分是什麼意思),或者重複現有答案中的信息(從2014年開始)或者(如果從字面上理解的話)是錯誤的(OP代碼包含沒有'my_list'變量)。 – melpomene 2017-07-19 18:20:12