Python : Les structures de données

Créer des sets

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Dans cette vidéo, apprenez à créer des sets à l'aide du constructeur en utilisant comme paramètre un tableau de valeurs.
08:07

Transcription

Nous voici prêts à explorer nos sets. J'ai donc ici, un set exprimé par des accolades. Il n'y a aucun ordre dans un ensemble, dans un set, je vous l'ai dit. Et ça se voit d'ailleurs : Voyez, Yonne, Haute Vienne, Allier, Finistère Finalement, ce n'est pas du tout l'ordre avec lequel je l'ai ajouté. Ici, cette itération, cette liste ne m'a pas retourné les éléments dans cet ordre. Pourquoi sont-ils totalement désordonnés ? Parce que derrière, le set est généré à travers un dictionnaire caché, un tableau de hachage caché, où on a haché chaque élément et on les a placés dans une forme de tableau, si vous voulez. Tout cela, pour pouvoir retrouver très rapidement des membres. Donc, l'implémentation interne est faite selon un tableau de hachage et comme le set dans la théorie et dans la pratique n'a pas d'ordre, il est inutile de le trier. On pourrait faire un sort sur un set, mais ce n'est vraiment pas le but. Et là, vous voyez que ça me retourne une liste. C'est vraiment pas le but parce que ça prend du temps, le tri, c'est toujours quelque chose d'assez coûteux et si vous avez vraiment besoin d'avoir quelque chose de trié et bien, utilisez autre chose qu'un set, finalement. Donc, j'en reviens à mes moutons. Me voici avec mon set. Et, je peux bien entendu, ajouter ou enlever des éléments : le set est mutable. Il y a deux types de sets d'ailleurs. Il y a un set traditionnel qui est muable et un frozen set, on va le voir dans quelques instants, qui lui, comme son nom l'indique, est immuable. Donc, je reste avec mon idée d'annexer la Suisse et donc, on part sur un add, tout simplement ; Le add va pouvoir ajouter un élément. Je vais dire, on va ajouter le Valais. Ah, ça marche. Et vous voyez, d'ailleurs que ça a changé un peu la configuration de mon set. C'est-à-dire que si je ne fais pas, voyez ici, j'ai Aube, Loiret etc. Mais si je ne le fais pas et que je relance, j'ai Aude, Haut-Rhin, Rhône. Si je le refais, j'ai Gers, Haute-Saone, territoire de Belfort. Je le refais encore : Ariège, Mayote. Tout ça, c'est dû simplement au fait que le tableau de hachage est différent, finalement. On a fait les haches, on les a placés dans ce qu'on appelle des buckets, à l'intérieur de la structure interne du set. Donc vraiment, une dernière fois, on a compris, ne vous attendez à aucun ordre en particulier. Ça c'est vraiment quelque chose qui est traditionnel dans les ensembles. Ça vient de la mathématique des ensembles donc, inutile de râler là-dessus, c'est normal. Ensuite, on ajoute le Valais et puis, autre particularité du set, les duplicas sont interdits. On ne peut pas avoir deux fois le même élément. Donc on a un ensemble, on a des membres, des éléments et ils sont uniques. Ça, c'est une garantie. Par contre, comme Python est très gentil avec nous, je peux le faire deux fois. On va voir d'ailleurs, ça n'aura aucune incidence parce qu'on va faire comme ça : on va faire un print ici, un print ici, un print ici et on va printer la longueur. Tiens, j'aurais pu copier directement le résultat. Je vais faire ça. Voilà. Donc, on va voir la longueur de notre set avant d'ajouter le Valais, après avoir ajouté le Valais et après avoir ajouté une deuxième fois le Valais. Donc, 101, 102 et 102. Cette deuxième instruction n'a rien fait, en fait. Elle a vérifié simplement en interne, si la valeur existait déjà. Si c'était le cas, elle a abandonné totalement. Donc, ça ne sert absolument à rien d'ajouter plusieurs fois les mêmes valeurs, on a une garantie d'unicité. Ce qui est bien d'ailleurs. C'est vraiment un des principes du set. On va essayer autre chose. Et là, vous avez peut-être maintenant l'habitude, parce qu'on avait fait ça avec des listes. Donc je rajoute des choses qui n'existent pas le canton de Vaud, par exemple et puis le canton... Je peux remettre le Valais, d'ailleurs. Et là, vous vous doutez bien, qu'il n'y en a qu'un sur deux qui va être inséré. Mais, oui, non, peut-être. Alors, qu'est-ce que j'essaye de faire ? Je prends une liste et puis, j'essaye d'ajouter. Alors, qu'est-ce qui va se passer avec le add ? Vous vous doutez peut-être qu'on est un peu dans la même situation : on ne peut pas ajouter un type liste parce qu'il n'est pas hachable. On a déjà vu ça. En fait, si je fais un add, le add veut ajouter un élément évidemment. Et là, c'est une liste donc il ne peut pas unpacker ou décomposer les éléments. Lui, il veut rajouter la liste elle-même, sauf que la liste ne peut pas être hachable. On l'a vu, c'est un type muable. Donc, on ne peut pas en faire un hache, on peut faire un hache que des types qui sont immuables. Et donc, si on ne peut pas faire un hache, on ne peut pas l'ajouter dans un set puisqu'il y a un hache en interne qui va être généré pour le positionner quelque part. Donc, CQFD on ne peut pas faire ça. Par contre, ce qu'on peut faire, au lieu d'un add, c'est la commande updates qui elle, vous voyez, n'attend pas un x mais un other, quelque chose, et on peut faire un update à partir d'une liste et cette fois-ci, vous voyez en plus que le other a l'opérateur d'unpacking dans ses paramètres, c'est-à-dire qu'il va unpacker l'itérable qui va venir pour ajouter chaque élément au set. Ça s'appelle update, donc on comprend que ça met à jour : ça, ça va être ajouté et puis ça, on n'en parle pas et on aura donc un length de, je ne sais plus, 104, non ? 103, on était à 102, oui avant. Alors, un mot sur cette syntaxe d'ailleurs. On fait un update, on aurait pu faire quelque chose comme ça un set, on aurait pu, ce n'était pas vraiment la peine. Mais donc, on peut vraiment prendre une liste et initialiser un set. D'ailleurs, si vous créez un nouveau set, je peux peut-être faire la Suisse, par exemple. Et je vais dire, et bien, alors, la syntaxe, ça on est d'accord, ce serait une liste. On va mettre le Valais, Vaud, Genève, Neuchâtel, etc. Mais on va s'arrêter, même si on ne veut pas faire de jaloux, mais on va quand même s'arrêter. Alors donc, ça évidemment, ça va devenir une liste. Si je fais ça, vous vous souvenez, ça va devenir un tuple. OK. Par contre, si je fais ça et bien, on essaye, on ne peut pas. Parce que le constructeur, si vous voulez, de sets attend un argument, pas quatre. Et donc, qu'est-ce qu'on fait ? On génère une liste à l'intérieur. Voila, ça c'est une syntaxe qui existe depuis un certain temps en Python. Si vous êtes en Python 2 quelque chose, c'est cette syntaxe que vous pouvez utiliser. Sachez que les sets et les frozen sets ont été ajoutés comme type 1er niveau, si vous voulez, dans l'histoire de Python. Si vous avez une très vieille version de Python, peut-être que vous ne l'aurez pas directement comme ça sans faire un import. Bon, enfin, une très, très vieille. Ça a très peu de chances d'arriver. Et donc ça, c'est une syntaxe possible, vous avez une deuxième syntaxe que vous pouvez utiliser, peut-être juste comme ceci. C'est une syntaxe un peu plus moderne et qui ressemble un peu à un dictionnaire, n'est-ce pas ? La différence avec un dictionnaire : vous avez comme ça la clé et la valeur. Je pourrais faire quelque chose comme ça pour que ça ait du sens. Donc, ça ce serait typiquement un dictionnaire, mais si vous ne mettez pas de clé comme en interne le set ressemble un peu un à dictionnaire, même si on ne le sait pas. Cette syntaxe a un petit peu de sens. Vous pouvez le faire comme ça, également. Il y a une tendance dans la communauté à utiliser l'ancienne syntaxe, je trouve que cette syntaxe est plutôt pas mal. Elle a quand même un défaut, c'est vrai. C'est que vous ne pouvez pas faire ça : Vous ne pouvez pas initialiser un set vide à l'aide de cette syntaxe. Là, ce que vous initialisez, c'est un dictionnaire qui est vide. Si vous voulez initialiser un set vide, vous êtes obligés de faire quelque chose comme ça. Et ensuite, de faire des adds ou des updates. Mais si vous faites ceci, donc et qu'il n'y a pas de paires que les valeurs, c'est un set qui va être initialisé. Alors, vous pouvez, peut-être, le faire plus explicitement. C'est vrai que ça a un avantage, d'être plus lisible si vous le faites comme ça. Et donc on ferme notre liste et on le met dans le constructeur du set.

Python : Les structures de données

Maîtrisez les ressources du langage de programmation Python. Abordez en détail les structures de données natives telles que les listes, les tuples et les dictionnaires.

2h07 (23 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :30 août 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !