2011-12-08 28 views
6

我必須做出一個函數,一個空列表作爲第一個參數和n爲謝勝利,參數,使:如何填寫清單

L=[] 
function(L,5) 
print L 
returns: 
[1,2,3,4,5] 

我在想:

def fillList(listToFill,n): 
    listToFill=range(1,n+1) 

但它正在返回一個空列表。

回答

15

考慮的extend用法:

 
>>> l = [] 
>>> l.extend(range(1, 6)) 
>>> print l 
[1, 2, 3, 4, 5] 
>>> l.extend(range(1, 6)) 
>>> print l 
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5] 

如果你想一個函數(做同樣的):

def fillmylist(l, n): 
    l.extend(range(1, n + 1)) 
l = [] 
fillmylist(l, 5) 
2

沒有明確的函數returnyield返回None。你想要的是

def fill_list(l, n): 
    for i in xrange(1, n+1): 
     l.append(i) 
    return l 

但這是非常unpythonic。你最好只調用range(1, n+1)也返回列表[1,2,3,4,5]n=5

def fill_list(n): 
    return range(1, n+1) 
+0

該函數不應返回任何內容,而是使用從1到n的整數填充傳遞給它的列表。 –

+0

@LinusSvendsson:然後從我的建議中刪除'return'。 –

+0

該函數應該帶兩個參數,列表來填充和n! –

0

def fillList(listToFill,n): 
    listToFill=range(1,n+1) 

你只改變listToFill的指針,如果你不返回新的指針;新指針在函數外不可用,並且仍然有空列表的指針(在外部範圍內)。

0
  • 如果你這樣做:在功能範圍內創建

def fillList(listToFill,n): listToFill=range(1,n+1)

一個新的列表,當函數結束時消失。無用。

  • 有了:

def fillList(listToFill,n): listToFill=range(1,n+1) return listToFill()

返回列表中,您必須使用這樣的:

newList=fillList(oldList,1000) 
  • 最後沒有返回參數:

def fillList(listToFill,n): listToFill.extend(range(1,n+1))

,並調用它像這樣:

fillList(oldList,1000) 

結論

裏面一個功能,如果你想修改您可以重新分配它並返回它的參數,或者你可以調用對象的方法並不返回任何內容。 你不能只是重新分配它,就好像你不在函數中一樣,也不會返回任何東西,因爲它不會影響函數的外部效果。