2011-12-08 27 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) 

结论

里面一个功能,如果你想修改您可以重新分配它并返回它的参数,或者你可以调用对象的方法并不返回任何内容。 你不能只是重新分配它,就好像你不在函数中一样,也不会返回任何东西,因为它不会影响函数的外部效果。