264 votes

Comment déclarer un tableau de zéros en Python (ou un tableau d'une certaine taille) ?

J'essaie de construire un histogramme de comptage... donc je crée des buckets. Je sais que je pourrais simplement passer par là et ajouter un tas de zéros, c'est-à-dire quelque chose de ce genre :

buckets = [];
for i in xrange(0,100):
    buckets.append(0);

Y a-t-il un moyen plus élégant de le faire ? J'ai l'impression qu'il devrait y avoir un moyen de déclarer un tableau d'une certaine taille.

Je sais que numpy a numpy.zeros mais je veux la solution plus générale

517voto

dan04 Points 33306
buckets = [0] * 100

149voto

OK. Points 755

Juste pour être complet : Pour déclarer une liste multidimensionnelle de zéros en python, vous devez utiliser une compréhension de liste comme ceci :

buckets = [[0 for col in range(5)] for row in range(10)]

pour éviter le partage des références entre les lignes.

Cela semble plus maladroit que le code de chester1000, mais c'est essentiel si les valeurs sont censées être modifiées ultérieurement. Voir le FAQ Python pour plus de détails.

29voto

mjhm Points 6418

Vous pouvez multiplier un list par un nombre entier n pour répéter le list n temps :

buckets = [0] * 100

24voto

chester1000 Points 591

Comme c'est le premier résultat sur Google et ici pour certaines recherches, j'aimerais inclure la même déclaration, mais pour un tableau multidimensionnel :

buckets = [ [0] * 100 ] * 100 # DOES NOT WORK!

c'est un tableau de 100x100 rempli de zéros

EDIT + AVERTISSEMENT

Regardez d'abord les commentaires ! Cette méthode ne fonctionne pas correctement ! Elle ne fait que dupliquer la référence à la même liste. Par conséquent, vous vous retrouverez avec UNE liste unique et 100 références à celle-ci. NE L'UTILISEZ PAS !

Utilisez plutôt :

bucket = [None] * 100
for i in range(100):
    bucket[i] = [None] * 100

OU

w, h = 100, 100
bucket = [[None] * w for i in range(h)]

Les deux produiront une liste de seaux multidimensionnelle vide 100x100.

21voto

fabrizioM Points 11498

utiliser numpy

import numpy
zarray = numpy.zeros(100)

Et ensuite utiliser le Histogramme fonction de bibliothèque

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