2011-12-08 13 views
6

Tengo que hacer una función que toma una lista vacía como primer argumento y n como argumento secound, de modo que:Cómo llenar una lista

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

que estaba pensando:

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

pero está devolviendo una lista vacía.

Respuesta

15

Considere el uso de 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] 

Si desea hacer una función (hacer lo mismo):

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

Una función sin un explícito return o yield devuelve None. Lo que quiere es

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

pero eso es muy antipático. Será mejor que acaba de llamar a range(1, n+1) que también devuelve la lista de [1,2,3,4,5]n=5:

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

La función no debe devolver nada, pero complete la lista que se le pasa con enteros de 1 a n. –

+0

@LinusSvendsson: luego elimine el 'return' de mi sugerencia. –

+0

la función debería tomar dos argumentos, la lista para llenar yn! –

0

En

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

solo cambia el puntero de listToFill, si no devuelve el nuevo puntero; el nuevo puntero no está disponible fuera de la función y todavía tiene el puntero de su lista vacía (en el alcance externo).

0
  • Si lo hace:

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

una nueva lista se crea dentro del ámbito de la función y desaparece cuando termina la función. inútil.

  • Con:

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

que devuelve la lista y usted debe utilizar de esta manera:

newList=fillList(oldList,1000) 
  • Y, por último, sin argumentos que regresan:

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

y lo llaman así:

fillList(oldList,1000) 

Conclusión:

dentro de una función, si desea modificar un argumento puede reasignar y devolverlo, o si puede llamar a los métodos del objeto y no devolver nada. No puede reasignarlo como si estuviera fuera de la función y no devolver nada, ya que no tendrá efecto fuera de la función.

Cuestiones relacionadas