346 votes

Liste Python vs. Tableau - quand les utiliser?

Si vous créez un tableau 1d, vous pouvez la mettre en œuvre sous forme de Liste, ou d'utiliser le 'tableau' module dans la STDLIB. J'ai toujours utilisé des Listes de tableaux 1d.

Qu'est-ce que la raison ou les circonstances où je voudrais utiliser le tableau de module à la place?

Est-il pour les performances et l'optimisation de la mémoire, ou ai-je raté quelque chose d'évident?

402voto

Dan Points 18831

Fondamentalement, Python, les listes sont très flexibles et peuvent tenir tout à fait hétérogènes, des données arbitraires, et ils peuvent être ajoutés de manière très efficace, en temps constant amorti. Si vous avez besoin de réduire et agrandir votre tableau de temps de manière efficace et sans tracas, ils sont le chemin à parcourir. Mais ils utilisent beaucoup plus d'espace C des tableaux.

L' array.array type, d'autre part, est juste un wrapper mince sur C des tableaux. Il peut contenir uniquement des données homogènes, tous du même type, et donc il utilise seulement sizeof(one object) * length octets de mémoire. Surtout, vous devez utiliser lorsque vous avez besoin d'exposer un C tableau à une extension ou d'un système d'appel (par exemple, ioctl ou fctnl). C'est aussi un bon moyen de représenter une mutable chaîne (array('B', bytes)) jusqu'à ce que devient disponible en Python 3.0.

Toutefois, si vous voulez faire des maths sur un ensemble homogène de matrice de données numériques, alors vous êtes beaucoup mieux d'utiliser NumPy, qui peut automatiquement vectoriser des opérations sur les complexes multi-dimensions des tableaux.

Pour rendre une longue histoire courte: array.array est utile lorsque vous avez besoin d'un homogènes C tableau de données pour des raisons autres que de faire des mathématiques.

62voto

André Points 4833

Pour presque tous les cas, la liste normale est le bon choix. Le module tableaux est plus comme un wrapper fin sur C des tableaux, qui vous donner le genre de fortement typé conteneurs (voir docs), avec un accès à plus de C-tels que les types comme signed/unsigned short ou double, qui ne font pas partie des types intégrés. Je dirais d'utiliser le module tableaux seulement si vous en avez vraiment besoin, dans tous les autres cas, le bâton avec les listes.

48voto

Jason Baker Points 56682

Le tableau est un module de type de l'une de ces choses que vous n'avez probablement pas besoin si vous ne savez pas pourquoi vous voulez l'utiliser (et d'en prendre note que je ne suis pas en train de dire que, dans une manière condescendante!). La plupart du temps, l'ensemble du module est utilisé pour l'interface avec du code C. Pour vous donner un plus de réponse directe à votre question au sujet de la performance:

Les tableaux sont plus efficaces que les listes pour certaines utilisations. Si vous avez besoin d'allouer un tableau que vous SAVEZ ne va pas changer, alors que les tableaux peuvent être plus rapide et utilise moins de mémoire. GvR a une optimisation de l'anecdote dans laquelle le module de la matrice de sort pour être le gagnant (lecture longue, mais ça vaut la peine).

D'autre part, une partie de la raison pour laquelle des listes de manger plus de mémoire que de tableaux est parce que python va allouer un supplément de quelques éléments quand allouée de tous les éléments utilisés. Cela signifie que ajoutant des éléments à des listes est plus rapide. Donc, si vous envisagez sur l'ajout d'éléments d'une liste est le chemin à parcourir.

TL;DR je n'avais utiliser un tableau si vous avez eu une exceptionnelle d'optimisation de besoin ou si vous avez besoin de faire l'interface avec du code C (et ne peut pas utiliser pyrex).

13voto

Ben Hoffstein Points 44398

Ma compréhension est que les tableaux sont stockés de manière plus efficace (c'est à dire comme des blocs de mémoire contigus contre des pointeurs vers des objets Python), mais je ne suis pas au courant de tout avantage en matière de performances. En outre, avec des tableaux, vous devez stocker les primitives du même type, alors que les listes peuvent stocker quoi que ce soit.

5voto

Hortitude Points 3963

Le tableau peut être utilisé uniquement pour les types spécifiques, alors que les listes peuvent être utilisées pour n'importe quel objet.

Les tableaux peuvent également uniquement les données d'un type, tandis qu'une liste peut avoir des entrées des différents types d'objet.

Les tableaux sont également plus efficace pour certains le calcul numérique.

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: