236 votes

Liste de zéros en python

Comment puis-je créer une liste qui ne contient que des zéros ? Je veux pouvoir créer une liste de zéros pour chaque int dans range(10)

Par exemple, si l'int dans la plage était 4 je vais obtenir :

[0,0,0,0]

et pour 7:

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

405voto

Ben Points 496
#ajoutez du code ici pour déterminer le nombre de zéros dont vous avez besoin, en nommant la variable n.
listofzeros = [0] * n

si vous préférez le mettre dans la fonction, il suffit de copier ce code et d'ajouter return listofzeros

Ce qui ressemblerait à ceci :

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

output d'exemple :

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

50voto

Seppo Erviälä Points 619
$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

Vous devriez utiliser [0] * n pour générer une liste avec n zéros.

Voir pourquoi [] est plus rapide que list()

Cependant, il y a un piège, à la fois itertools.repeat et [0] * n créeront des listes dont les éléments font référence au même id. Ce n'est pas un problème avec des objets immuables comme les entiers ou les chaînes de caractères, mais si vous essayez de créer une liste d'objets mutables comme une liste de listes ([[]] * n), alors tous les éléments feront référence au même objet.

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

[0] * n créera la liste immédiatement tandis que repeat peut être utilisé pour créer la liste de manière paresseuse lorsqu'elle est accédée pour la première fois.

Si vous traitez une quantité vraiment importante de données et que votre problème n'a pas besoin d'une longueur de liste variable ou de plusieurs types de données dans la liste, il est préférable d'utiliser des tableaux numpy.

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

Les tableaux numpy consommeront également moins de mémoire.

27voto

Andrew Clark Points 77748

Le moyen le plus simple de créer une liste où toutes les valeurs sont les mêmes est de multiplier une liste à un seul élément par n.

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

Donc pour votre boucle :

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

11voto

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

5voto

Lelouch Lamperouge Points 1930

zeros=[0]*4

vous pouvez remplacer 4 dans l'exemple ci-dessus par le nombre de votre choix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X