236 votes

Liste de zéros en python

Comment puis-je créer un list qui ne contient que des zéros ? Je veux pouvoir créer un zeros list pour chaque int sur range(10)

Par exemple, si le int dans la gamme était 4 J'aurai :

[0,0,0,0]

et pour 7 :

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

405voto

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

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

Qui ressemblerait à ceci :

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

sortie de l'échantillon :

>>> 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.2

from timeit import timeit
import numpy

timeit("list(0 for i in xrange(0, 100000))", number=1000)
> 5.487300157546997

timeit("[0] * 100000", number=1000)
> 0.5582051277160645

timeit('list(itertools.repeat(0, 100000))', 'import itertools', number=1000)
> 0.8496840000152588

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

Il y a cependant un problème, si vous créez une liste avec un élément mutable (ex. [[1]] * n ) alors tous les éléments feront référence au même objet. Il créera également la liste immédiatement alors que repeat peut être utilisé pour créer la liste paresseusement lors du premier accès.

Si vous avez affaire à une très grande quantité de données et que votre problème ne nécessite pas une longueur variable de la liste ou plusieurs types de données dans la liste, il est préférable d'utiliser la méthode suivante numpy les tableaux.

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

numpy consommeront également moins de mémoire.

27voto

Andrew Clark Points 77748

La manière la plus simple de créer une liste où toutes les valeurs sont identiques est de multiplier une liste à un é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 avec le nombre que vous voulez.

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