two - python join array
Lista de ceros en python (8)
Esta pregunta ya tiene una respuesta aquí:
- Crear una lista vacía en python con ciertas respuestas de tamaño 11
¿Cómo puedo crear una list
que contiene solo ceros? Quiero poder crear una list
ceros para cada int
dentro del range(10)
Por ejemplo, si el int
en el rango fue 4
obtendré:
[0,0,0,0]
y para 7
:
[0,0,0,0,0,0,0]
Esta es la forma de xrange :
list(0 for i in xrange(0,5))
La manera más fácil de crear una lista donde todos los valores son iguales es multiplicando una lista de elementos por n
.
>>> [0] * 4
[0, 0, 0, 0]
Entonces para tu ciclo:
for i in range(10):
print [0] * i
Si desea una función que devolverá 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]
zeros=[0]*4
puede reemplazar 4
en el ejemplo anterior con el número que desee.
#add code here to figure out the number of 0''s you need, naming the variable n.
listofzeros = [0] * n
si prefieres ponerlo en la función, solo return listofzeros
ese código y agrega la lista de return listofzeros
Que se vería así:
def zerolistmaker(n):
listofzeros = [0] * n
return listofzeros
muestra de salida:
>>> 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]
>>>
$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[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 list ()
Sin embargo, hay un itertools.repeat
, tanto itertools.repeat
como [0] * n
crearán listas cuyos elementos se refieren a la misma id
. Esto 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
), entonces 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 perezosamente cuando se acceda por primera vez.
Si se trata de una gran cantidad de datos y su problema no requiere una longitud variable de la lista o múltiples tipos de datos dentro de la lista, es mejor usar matrices numpy
.
timeit(''numpy.zeros(100000, numpy.int)'', ''import numpy'', number=1000)
> 0.057849884033203125
numpy
matrices numpy
también consumirán menos memoria.
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.