Lista de ceros en python

¿Cómo puedo crear una list que contenga solo ceros? Quiero poder crear una list ceros para cada int en el range(10)

Por ejemplo, si el int en el rango era 4 obtendré:

 [0,0,0,0] 

y para 7 :

 [0,0,0,0,0,0,0] 

 #add code here to figure out the number of 0's you need, naming the variable n. listofzeros = [0] * n 

Si prefiere ponerlo en la función, simplemente suelte ese código y agregue return listofzeros

Que se vería así:

 def zerolistmaker(n): listofzeros = [0] * n return listofzeros 

salida de muestra:

 >>> zerolistmaker(4) [0, 0, 0, 0] >>> zerolistmaker(5) [0, 0, 0, 0, 0] >>> zerolistmaker(15) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] >>> 
 $python 2.7.8 from timeit import timeit import numpy timeit("list(0 for i in xrange(0, 100000))", number=1000) > 8.173301935195923 timeit("[0 for i in xrange(0, 100000)]", number=1000) > 4.881675958633423 timeit("[0] * 100000", number=1000) > 0.6624710559844971 timeit('list(itertools.repeat(0, 100000))', 'import itertools', number=1000) > 1.0820629596710205 

Debe usar [0] * n para generar una lista con n ceros.

Vea por qué [] es más rápido que la lista ()

Sin embargo, hay un gotcha, tanto itertools.repeat como [0] * n crearán listas cuyos elementos se refieren al mismo id . Este no es un problema con objetos inmutables como enteros o cadenas, pero si intenta crear una lista de objetos mutables como una lista de listas ( [[]] * n ), todos los elementos se referirán al mismo objeto.

 a = [[]] * 10 a[0].append(1) a > [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]] 

[0] * n creará la lista inmediatamente, mientras que la repeat se puede usar para crear la lista de forma perezosa cuando se accede por primera vez.

Si está lidiando con una gran cantidad de datos y su problema no necesita una longitud variable de la lista o varios tipos de datos dentro de la lista, es mejor utilizar matrices numpy .

 timeit('numpy.zeros(100000, numpy.int)', 'import numpy', number=1000) > 0.057849884033203125 

numpy matrices numpy también consumirán menos memoria.

La forma más fácil de crear una lista donde todos los valores son iguales es multiplicar una lista de un elemento por n .

 >>> [0] * 4 [0, 0, 0, 0] 

Así que para su bucle:

 for i in range(10): print [0] * i 
 $ python3 >>> from itertools import repeat >>> list(repeat(0, 7)) [0, 0, 0, 0, 0, 0, 0] 
 zlists = [[0] * i for i in range(10)] 

zlists[0] es una lista de 0 ceros, zlists[1] es una lista de 1 cero, zlists[2] es una lista de 2 ceros, etc.

zeros=[0]*4

puede reemplazar 4 en el ejemplo anterior con cualquier número que desee.

Si desea una función que devuelva un número arbitrario de ceros en una lista, intente esto:

 def make_zeros(number): return [0] * number list = make_zeros(10) # list now contains: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

Aquí está la forma de xrange :

 list(0 for i in xrange(0,5))