Les tableaux en Python expliqués !
Si vous vous lancez dans la programmation ou découvrez Python, cet article est pour vous, les tableaux sont l'une des structures de données les plus utilisées. Comment Python représente-t-il les tableaux ? Comment pouvons-nous manipuler des tableaux en Python pour résoudre différents problèmes ? C'est ce que nous allons découvrir dans cet article.
Comment les ordinateurs stockent-ils les informations ?
Comme vous le savez, la forme d'information la plus primaire dans un ordinateur est composée de bits d'information. 8 bits de ces informations sont ensuite regroupés pour former ce que l'on appelle un octet .
Parce que les ordinateurs peuvent stocker de très gros morceaux de ces octets, ils ont besoin d'un nouveau mécanisme qui leur permette de lire et d'écrire rapidement des octets, c'est là que les adresses mémoire entrent en jeu, tout comme votre adresse personnelle différencie l'endroit où vous vivez de votre voisin, le ordinateur utilise des adresses mémoire pour différencier où se trouvent différents éléments de données et d'informations.
Il convient également de mentionner que l'ordinateur prend un temps d'accès O (1) pour atteindre n'importe quelle adresse mémoire, cela signifie que l'accès à l'octet # 5489637 est le même que l'accès à l'octet # 64.
Que sont les tableaux ?
Une pratique courante dans les langages de programmation consiste à utiliser des variables pour faire référence à une adresse dans une mémoire, par exemple l'identifiant X peut faire référence à l'octet #32.
Dans le cas où nous voulons stocker plusieurs adresses mémoire, créer plusieurs identifiants n'est ni efficace ni évolutif. Nous préférerions plus si nous avions un nom pour le groupe d'identifiants et utilisions des numéros pour accéder à des identifiants spécifiques. Une telle représentation est un tableau, c'est-à-dire une représentation d'un groupe de variables dans une partie contiguë de la mémoire de l'ordinateur.
Les chaînes en Python, par exemple, sont stockées de cette façon, disons que vous déclarez une nouvelle variable avec le texte "exemple" que Python allouera :
2 octets (mémoire nécessaire pour stocker un caractère Unicode) * 7 (nombre de caractères dans le mot exemple) = 14 octets de mémoire contigus pour stocker cette variable.
Tableaux référentiels
Python utilise un autre type de tableaux qui sont des tableaux référentiels, pour les comprendre regardons cet exemple, disons que vous possédez un hôtel et que vous avez 50 chambres, vous avez besoin d'un moyen de stocker le nom de qui séjourne dans quelle chambre donc une représentation comme celle-ci :
pour cela Python doit respecter la condition d'espace mémoire contigu à allouer. Mais comment fait-il cela lorsque les noms sont de longueurs différentes (des longueurs différentes signifient des exigences d'espace différentes) ?
Une solution serait de trouver la longueur de la plus grande chaîne et d'allouer suffisamment d'espace mémoire pour tous, mais cela ne sera pas efficace en mémoire car de l'espace sera gaspillé et que se passe-t-il si une nouvelle chaîne apparaît, qui est maintenant la plus grande chaîne ?
Pour résoudre ce problème, Python crée un tableau de références contiguës à plusieurs objets. Ainsi, même si la taille de chaque objet individuel peut varier, la mémoire utilisée pour stocker son adresse mémoire est la même. De cette manière, Python garantit un temps d'accès constant aux différents éléments du tableau. On appelle ce type de tableau tableau référentiel.
Pour illustrer cela, jetez un oeil à cette image:
Les listes et les tuples en Python utilisent ce type de tableau pour stocker des données.
Remarque : Comme les tableaux référentiels pointent vers des références, soyez prudent lorsque vous modifiez les valeurs de référence car vous pouvez également modifier les valeurs dans les listes par erreur. De plus, lors de la création de copies, assurez-vous de connaître la différence entre copie superficielle et copie profonde .
Baies compactes
Auparavant, nous avons parlé des chaînes et de la manière dont nous les stockons dans un tableau de mémoire contiguë. En fait, nous appelons ce tableau un tableau compact.
Un avantage de l'utilisation de tableaux compacts par rapport aux tableaux référentiels est qu'il n'y a pas de surcharge supplémentaire liée au stockage des références mémoire, nous stockons directement les données primaires. Un autre avantage à mentionner est qu'en cas d'utilisation d'une liste qui est un tableau référentiel, Python n'a aucun contrôle sur l'endroit où vos données sont stockées, même si la liste conserve des références à l'endroit où se trouvent les données. En raison du fonctionnement du matériel, il est plus efficace d'avoir vos données proches les unes des autres, elles peuvent être utilisées pour le même calcul.
Malgré ces avantages, pour les listes et les tuples, Python utilise des tableaux référentiels car ils sont pratiques à utiliser. Cependant, si vous insistez pour utiliser un tableau compact, Python vous fournit un module appelé tableau qui vous permet de faire ceci :
Ici vous avez remarqué que nous avons passé i comme premier argument à array. Parce que pour créer un tableau compact, nous devons spécifier le type pour l'allocation de mémoire appropriée. Pour les autres types de données, consultez ce tableau :
Si vous souhaitez en savoir plus sur le module de tableau, cliquez ici .
Un inconvénient du module de tableau est qu'il ne prend pas en charge les types de données définis par l'utilisateur. Des tableaux compacts avec une telle structure de données peuvent être définis à l'aide du module ctypes .
Tableaux dynamiques
Lors de la création d'un tableau compact, nous spécifions la taille précise de ce tableau afin que l'ordinateur sache quelle mémoire allouer. Parce qu'il alloue une zone mémoire voisine à d'autres baies.
En pratique, nous ne pouvons pas toujours connaître la taille de nos tableaux, ils peuvent s'étendre avec le temps. Pour remédier à ce problème, Python fournit une abstraction appelée Dynamic Array.
Cette abstraction utilise une instance de liste qui maintient un tableau sous-jacent dont la capacité est supérieure à la longueur de la liste réelle. Cette capacité supplémentaire nous aide à ajouter de plus en plus de données à la liste.
Lorsque nous épuisons finalement la capacité supplémentaire, Dynamic Array demande un nouveau tableau plus grand et copie tous les éléments dans le nouveau tableau et le système récupère l'espace de l'ancien tableau.
Python List est basé sur cette abstraction mais les tuples et les chaînes sont immuables (ne peuvent pas être modifiés) et ne sont donc pas basés sur cela.
Il convient également de mentionner que le tableau dynamique augmente non seulement sa taille, mais il peut également rétrécir si nous supprimons des éléments de la liste.
Listes et tuples
Ainsi, à partir de l'analyse que nous avons effectuée dans la section ci-dessus, nous pouvons diviser les méthodes Lists & Tuples en deux types de méthodes :
Méthodes immuables : méthodes qui existent à la fois dans les tuples et les listes et qui ne changent pas leur contenu. Voici un tableau de ces méthodes et de leur complexité temporelle :
Méthodes mutantes : méthodes qui n'existent que dans les listes car elles modifient les données sous-jacentes et la structure de la liste. Voici un tableau de ces méthodes et de leur complexité temporelle :
Nous n'avons pas discuté ici de ce que fait chaque méthode (c'est intuitif et facile) mais vous pouvez en savoir plus sur les listes et tuples Python .
Plats à emporter
- Les tableaux référentiels stockent les références dans leur mémoire de tableau, puis accèdent aux valeurs réelles via les références.
- Les tableaux compacts stockent les données réelles dans une mémoire contiguë.
- Les tableaux dynamiques sont des tableaux qui se développent et se réduisent automatiquement en fonction du nombre d'éléments qu'ils contiennent.
- Les listes sont basées sur des tableaux référentiels et dynamiques.
- Les tuples sont basés sur des tableaux référentiels.
- Les chaînes sont basées sur des tableaux compacts.
LinkedIn :https://www.linkedin.com/in/mohamed-aziz-belaweid/
GitHub :https://github.com/azayz
Lisez mes autres histoires :
REALM : Retrieval Augmented Language Model Pretraining Reconnaissance des émotions faciales, guide pratique !Abonnez-vous et recevez une notification chaque fois que je poste quelque chose :
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































