284 votes

Initialisation d'une liste à un nombre connu d'éléments en Python

En ce moment j'utilise une liste et je m'attendais à quelque chose comme:

 verts = list (1000)
 

Devrais-je utiliser un tableau à la place?

398voto

Steve Losh Points 11958

La première chose qui me vient à l'esprit est:

 verts = [None]*1000
 

Mais avez-vous vraiment besoin de le pré-initialiser?

85voto

FoxyLad Points 694

Pas tout à fait sûr pourquoi tout le monde est de vous donner un moment difficile pour le vouloir pour ce faire, il existe plusieurs scénarios où vous voudriez une taille fixe initialisées à la liste. Et vous avez correctement déduit que les tableaux sont sensibles dans ces cas.

import array
verts=array.array('i',(0,)*1000)

Pour les non-pythoneux, l' (0,)*1000 terme est la création d'un tuple contenant 1000 zéros. La virgule forces python de reconnaître (0) comme un n-uplet, sinon il serait évalué à 0.

J'ai utilisé un n-uplet au lieu d'une liste, car ils sont généralement plus faibles frais généraux.

68voto

e-shy Points 171

Une façon évidente et probablement pas efficace est

Notez que ceci peut être étendu à 2-dimension facilement. Par exemple, vous pouvez faire pour obtenir un 10 x 100 « tableau »

38voto

Miko Points 131

Vouloir initalize un tableau de taille fixe est une très bonne chose à faire dans tout langage de programmation; il n'est pas comme le programmeur veut mettre une instruction break dans un while(true) en boucle. Croyez-moi, surtout si les éléments sont juste va être remplacé et non pas simplement ajoutés ou soustraits, comme c'est le cas de nombreux algorithmes de programmation dynamique, vous ne voulez pas déconner avec ajout de déclarations et de vérifier si l'élément n'a pas été initialisé encore à la volée (c'est beaucoup de code messieurs).

object = [0 for x in range(1000)]

Cela fonctionne pour ce que le programmeur est d'essayer d'atteindre.

4voto

John Montgomery Points 3770

Vous pourriez faire ceci:

 verts = list(xrange(1000)) 

Cela vous donnerait une liste de 1000 éléments en taille et qui se trouve être initialisée avec des valeurs de 0 à 999. Comme list fait un __len__ premier pour dimensionner la nouvelle liste, elle devrait être assez efficace.

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