Fondamentalement, les listes Python sont très flexibles et peuvent contenir des données arbitraires complètement hétérogènes, et elles peuvent être ajoutées de manière très efficace, en temps constant amorti . Si vous avez besoin de réduire et d'élargir votre liste de manière efficace et sans tracas, c'est la voie à suivre. Mais ils utilisent beaucoup plus d' espace que les tableaux C .
Le array.array
type, d'autre part, n'est qu'un mince wrapper sur les tableaux C. Il ne peut contenir que des données homogènes, toutes du même type, et il n'utilise donc que des sizeof(one object) * length
octets de mémoire. Généralement, vous devez l'utiliser lorsque vous devez exposer un tableau C à une extension ou à un appel système (par exemple, ioctl
ou fctnl
).
array.array
est également un moyen raisonnable de représenter une chaîne mutable en Python 2.x ( array('B', bytes)
). Cependant, Python 2.6+ et 3.x propose une chaîne d' octets mutable comme bytearray
.
Cependant, si vous voulez faire des calculs sur un tableau homogène de données numériques, il vaut mieux utiliser NumPy, qui peut automatiquement vectoriser les opérations sur des tableaux multidimensionnels complexes.
Pour faire une histoire courte : array.array
est utile lorsque vous avez besoin d'un tableau de données C homogène pour des raisons autres que de faire des calculs .
sizeof(element)
× (nombre d'éléments) octets, plus un petit en-tête fixe pour la surcharge. Cependant, a ndarray quelques options avancées pour le traitement des tableaux rares et discontinus, et je pense que certaines stratégies d'allocation mémoire connectables pour les grands tableaux ... certaines de ces fonctionnalités avancées rendra l' utilisateur moins la mémoire, tandis que d' autres d' améliorer les performances en utilisant plus Mémoire.Dans presque tous les cas, la liste normale est le bon choix. Le module de tableaux ressemble plus à un wrapper mince sur des tableaux C, qui vous donne une sorte de conteneurs fortement typés (voir la documentation ), avec accès à plus de types de type C tels que court ou double signé / non signé, qui ne font pas partie de la construction -en types. Je dirais d'utiliser le module tableaux uniquement si vous en avez vraiment besoin, dans tous les autres cas, respectez les listes.
la source
array
n'est pas destinée à faire des mathématiques . Si vous essayez NumPyndarray
pour additionner un tableau de 10 ^ 8 nombres, il va complètementlist
disparaître. @tzot a la bonne idée de pourquoi la fonction intégréearray
est lente pour les mathématiques.Le module de tableau est une sorte de choses dont vous n'avez probablement pas besoin si vous ne savez pas pourquoi vous l'utiliseriez (et prenez note que je n'essaie pas de le dire de manière condescendante!) . La plupart du temps, le module tableau est utilisé pour s'interfacer avec le code C. Pour vous donner une réponse plus directe à votre question sur les performances:
Les tableaux sont plus efficaces que les listes pour certaines utilisations. Si vous devez allouer un tableau que vous SAVEZ ne changera pas, les tableaux peuvent être plus rapides et utiliser moins de mémoire. GvR a une anecdote d'optimisation dans laquelle le module de tableau sort vainqueur (longue lecture, mais ça vaut le coup).
D'un autre côté, une partie de la raison pour laquelle les listes consomment plus de mémoire que les tableaux est parce que python allouera quelques éléments supplémentaires lorsque tous les éléments alloués seront utilisés. Cela signifie que l'ajout d'éléments aux listes est plus rapide. Donc, si vous prévoyez d'ajouter des éléments, une liste est la voie à suivre.
TL; DR Je n'utiliserais un tableau que si vous aviez un besoin d'optimisation exceptionnel ou si vous devez vous interfacer avec du code C (et ne pouvez pas utiliser pyrex ).
la source
les avantages de chacun:
liste
tableau (ex: tableau numpy)
la source
Ma compréhension est que les tableaux sont stockés plus efficacement (c'est-à-dire sous forme de blocs de mémoire contigus par rapport aux pointeurs vers des objets Python), mais je ne suis au courant d'aucun avantage en termes de performances. De plus, avec les tableaux, vous devez stocker des primitives du même type, tandis que les listes peuvent stocker n'importe quoi.
la source
Les matrices de bibliothèque standard sont utiles pour les E / S binaires, telles que la traduction d'une liste d'entiers en une chaîne pour écrire, par exemple, dans un fichier wave. Cela dit, comme beaucoup l'ont déjà noté, si vous allez faire un vrai travail, vous devriez envisager d'utiliser NumPy.
la source
Si vous allez utiliser des tableaux, considérez les packages numpy ou scipy, qui vous donnent des tableaux avec beaucoup plus de flexibilité.
la source
Un tableau ne peut être utilisé que pour des types spécifiques, tandis que les listes peuvent être utilisées pour n'importe quel objet.
Les tableaux peuvent également uniquement des données d'un type, tandis qu'une liste peut avoir des entrées de différents types d'objets.
Les tableaux sont également plus efficaces pour certains calculs numériques.
la source
Une différence importante entre le tableau numpy et la liste est que les tranches de tableau sont des vues sur le tableau d'origine. Cela signifie que les données ne sont pas copiées et que toute modification apportée à la vue sera reflétée dans le tableau source.
la source
Cette réponse résumera presque toutes les requêtes sur le moment d'utiliser List et Array:
La principale différence entre ces deux types de données réside dans les opérations que vous pouvez effectuer sur eux. Par exemple, vous pouvez diviser un tableau par 3 et il divisera chaque élément du tableau par 3. La même chose ne peut pas être faite avec la liste.
La liste fait partie de la syntaxe de python, elle n'a donc pas besoin d'être déclarée alors que vous devez déclarer le tableau avant de l'utiliser.
Vous pouvez stocker des valeurs de différents types de données dans une liste (hétérogène), tandis que dans Array, vous ne pouvez stocker que des valeurs du même type de données (homogène).
Les tableaux étant riches en fonctionnalités et rapides, il est largement utilisé pour les opérations arithmétiques et pour stocker une grande quantité de données - par rapport à la liste.
Les tableaux prennent moins de mémoire que les listes.
la source
En ce qui concerne les performances, voici quelques chiffres comparant les listes python, les tableaux et les tableaux numpy (tous avec Python 3.7 sur un Macbook Pro 2017). Le résultat final est que la liste python est la plus rapide pour ces opérations.
la source