Lista de ceros en python [duplicate]

4 minutos de lectura

avatar de usuario
usuario1040563

¿Cómo puedo crear un list que contiene sólo ceros? Quiero ser capaz de crear un ceros list para cada int en range(10)

Por ejemplo, si el int en el rango estaba 4 voy a conseguir:

[0,0,0,0]

y para 7:

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

  • Para matrices numéricas grandes, debe usar numpyque tiene un zeros función para hacer esto.

    – Katriel

    16 de diciembre de 2011 a las 0:49

  • lista de comprensión: [0 for i in range(7)] o cualquier número entero que no sea 7.

    – patrickt

    5 oct 2021 a las 11:25


avatar de usuario
tiffany

#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 coloque 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]
>>> 

  • Supongo que esto es una compilación de algunas de las otras cosas, pero lo pone todo junto, y como dice el sitio web, “Estamos aquí para ayudar” (o algo así).

    – Tiffany

    16 de diciembre de 2011 a las 1:03


  • solo haz return [0] * ncomo listofzeros es una variable de relleno.

    – yurisich

    16 de diciembre de 2011 a las 4:20

  • Hermoso uso de la programación funcional.

    usuario4234032

    4 de septiembre de 2017 a las 0:54

  • Tenga cuidado si hace esto con tipos no primitivos. [{ }] * 5 hará una lista de 5 referencias al mismo diccionario.

    – Albert Nemec

    2 de septiembre de 2020 a las 23:49

  • Esta sintaxis es informal y necesita ser actualizada por Python.

    – usuario2585501

    23 de agosto de 2021 a las 3:12

avatar de usuario
Seppo Erviälä

$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

Deberías usar [0] * n para generar una lista con n ceros

Ver por qué [] es más rápido que list()

Sin embargo, hay un problema, ambos itertools.repeat y [0] * n creará listas cuyos elementos se refieran a los mismos 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 repeat se puede usar para crear la lista de forma perezosa cuando se accede por primera vez.

Si está tratando con una gran cantidad de datos y su problema no necesita una lista de longitud variable o múltiples tipos de datos dentro de la lista, es mejor usar numpy arreglos

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

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

  • ¿Puedes explicar un poco más por qué en casos de objetos mutables esto es un problema? Entonces, en números enteros, aunque son inmutables ya que los elementos se refieren a la misma identificación, ¿no serán todos los elementos del mismo número entero?

    – S. Salmán

    10 de julio de 2018 a las 17:47

  • Cuando crea una lista de listas, esperaría que todas las listas sean diferentes entre sí, mientras que en realidad son referencias a la misma lista. Esto no importa con los números enteros ya que no puede cambiar los valores de los números enteros (o cadenas) en Pyhton. Cuando haces operaciones como a = a + 1 obtienes un nuevo id por a + 1 en lugar de cambiar el valor original en id(a).

    – Seppo Erviälä

    11 de julio de 2018 a las 11:44

  • El gotcha me atrapó. Para crear una lista de listas de ceros (cuando numpy no es una opción), esto fue lo que se me ocurrió: p_ij = [[0] * k for i in range(k)] de esa manera no compartiría una identificación y cuando realizó una asignación como p_ij[2][3] no lo asignaría a TODAS las filas en el tercer elemento.

    – Dchaps

    3 abr 2021 a las 0:50

  • Gracias. En python3.9, las brechas de velocidad son las mismas.

    – al.zatv

    2 feb a las 22:31

La forma más fácil de crear una lista en la que todos los valores sean iguales es multiplicar una lista de un elemento por n.

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

Así que para tu ciclo:

for i in range(10):
    print [0] * i

$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[0, 0, 0, 0, 0, 0, 0]

zeros=[0]*4

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

avatar de usuario
tipo todo

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.

avatar de usuario
Gavin Anderegg

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]

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad