2011-08-11 7 views
13

Duplicar posible:
Some built-in to pad a list in pythonRelleno una lista en pitón con especial valor

Tengo un método que devolverá una lista (variable de instancia) con 4 elementos. Otro método se usa para asignar valores a la lista.

Pero por el momento no puedo garantizar que la lista tenga 4 elementos cuando se solicite, así que quiero llenarla con 0.

¿Hay alguna forma de llenarlo con 0 además de decir un bucle?

 
for i in range(4 - len(self.myList)): 
    self.myList.append(0) 

Respuesta

20
self.myList.extend([0] * (4 - len(self.myList))) 

Esto funciona cuando el relleno con números enteros. No lo hagas con objetos mutables.

Otra posibilidad sería:

self.myList = (self.myList + [0] * 4)[:4] 
1
self.my_list.extend([0 for _ in range(4 - len(self.my_list))]) 
2
list = object.method() 
list = list + [0 for _ in range(4-len(list))] 
+0

O '+ =' también funcionará. – agf

+0

Derecha. Originalmente quería agregar algo como 'list = (list + [0 for _ in range (4)]) [: 4]' y luego me di cuenta de que funciona más simple. – glglgl

+2

Realmente no deberías usar 'list' para tu var nombre. Eso sobrescribirá la lista 'incluida()'. –

1

Una solución de agregación y corte hacky:

>>> x = [1,2] 
>>> (x + [0] * 4)[:4] 
[1, 2, 0, 0] 

O:

>>> (x + [0] * (4 - len(x))) 
[1, 2, 0, 0] 
3

Otra forma, utilizando itertools:

from itertools import repeat 
self.my_list.extend(repeat(0, 4 - len(self.my_list))) 
2

por qué no crear una función de utilidad poco?

>>> def pad(l, content, width): 
...  l.extend([content] * (width - len(l))) 
...  return l 
... 
>>> pad([1, 2], 0, 4) 
[1, 2, 0, 0] 
>>> pad([1, 2], 2, 4) 
[1, 2, 2, 2] 
>>> pad([1, 2], 0, 40) 
[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
>>> 
5
>>> out = [0,0,0,0] # the "template" 
>>> x = [1,2] 
>>> out[:len(x)] = x 
>>> print out 
[1, 2, 0, 0] 

Asignación x a una rebanada de out es equivalente a:

out.__setitem__(slice(0, len(x)), x) 

o:

operator.setitem(out, slice(0, len(x)), x) 
Cuestiones relacionadas