Как заполнить список - PullRequest
8 голосов
/ 08 декабря 2011

Я должен сделать функцию, которая принимает пустой список в качестве первого аргумента и n в качестве аргумента secound, так что:

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

Я думал:

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

но возвращается пустой список.

Ответы [ 4 ]

17 голосов
/ 08 декабря 2011

Рассмотрим использование 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)
4 голосов
/ 08 декабря 2011

Функция без явного return или yield возвращает None.То, что вы хотите, это

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

, но это очень нелепо.Вам лучше просто позвонить range(1, n+1), который также возвращает список [1,2,3,4,5] для n=5:

def fill_list(n):
    return range(1, n+1)
0 голосов
/ 05 марта 2014
  • Если вы делаете:

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)

Заключение

Внутри функции, если вы хотите изменить аргумент, вы можете переназначить его и вернуть или вы можете вызвать методы объекта и ничего не возвращать. Вы не можете просто переназначить его так, как если бы вы были вне функции и ничего не возвращать, потому что это не будет иметь эффекта вне функции.

0 голосов
/ 08 декабря 2011

В

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

вы изменяете только указатель listToFill, если не возвращаете указатель new ; новый указатель недоступен из функции, и у вас все еще есть указатель вашего пустого списка (во внешней области видимости).

...