Outils pour utilisateurs

Outils du site


issue174:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
issue174:python [2021/10/31 18:23] – créée auntieeissue174:python [2021/11/02 16:25] (Version actuelle) andre_domenech
Ligne 1: Ligne 1:
-Somewhere in the back of my mind, I believe that I touched on sets in an article many, many years ago. If I in fact did, I don’t think that I really did the subject justice. So, I decided to fix that this month.+**Somewhere in the back of my mind, I believe that I touched on sets in an article many, many years ago. If I in fact did, I don’t think that I really did the subject justice. So, I decided to fix that this month.
  
 What is a set? The easiest way to answer that is to show you by example. What is a set? The easiest way to answer that is to show you by example.
Ligne 9: Ligne 9:
 List2 = ['S01E01', 'S01E03', 'S01E05', 'S01E07', 'S01E08', ’S01E03’] List2 = ['S01E01', 'S01E03', 'S01E05', 'S01E07', 'S01E08', ’S01E03’]
  
-Let’s say that List1 contains all of the episodes for a show called “My Life” that have aired so far. And let’s further say that List2 contains the episodes that we have recorded on our home PVR. (The Sxx stands for Season (Series for my friends outside of the US) of the show, and the Exx stands for Episode number.) Just looking at the lists written down, it’s easy to see that List2 (what we have recorded) is missing ‘S01E02’, ‘S01E04’ and ‘S01E06’, and that ‘S01E03’ was recorded twice. But how can we do it programmatically?+Let’s say that List1 contains all of the episodes for a show called “My Life” that have aired so far. And let’s further say that List2 contains the episodes that we have recorded on our home PVR. (The Sxx stands for Season (Series for my friends outside of the US) of the show, and the Exx stands for Episode number.) Just looking at the lists written down, it’s easy to see that List2 (what we have recorded) is missing ‘S01E02’, ‘S01E04’ and ‘S01E06’, and that ‘S01E03’ was recorded twice. But how can we do it programmatically?**
  
-One solution is to use the in operator, and step through each of the items in List1 and see if the item is in List2.+Quelque part, je crois avoir abordé le sujet des ensembles dans un article il y a de nombreuses années. Si c'est le cas, je ne pense pas avoir vraiment bien traîté le sujet. J'ai donc décidé d'y remédier ce mois-ci. 
 + 
 +Qu'est-ce qu'un ensemble ? La façon la plus simple de répondre à cette question est de vous montrer un exemple. 
 + 
 +Supposons que nous ayons deux listes. 
 + 
 +List1 = [''S01E01', 'S01E02', 'S01E03', 'S01E04', 'S01E05', 'S01E06', 'S01E07', 'S01E08'
 + 
 +List2 = ['S01E01', 'S01E03', 'S01E05', 'S01E07', 'S01E08', 'S01E03'
 + 
 +Disons que la liste 1 contient tous les épisodes qui ont déjà été diffusés d'une émission intitulée « Ma vie ». Disons également que la liste 2 contient les épisodes que nous avons enregistrés sur notre magnétoscope numérique. (Le Sxx correspond à la saison de la série, et le Exx correspond au numéro de l'épisode). En regardant simplement les listes écrites, il est facile de voir que dans la liste 2 (ce que nous avons enregistré) manquent 'S01E02', 'S01E04' et 'S01E06', et que 'S01E03' a été enregistré deux fois. Mais comment pouvons-nous le faire de manière programmatique ? 
 + 
 + 
 +**One solution is to use the in operator, and step through each of the items in List1 and see if the item is in List2.
  
 for epi in List1: for epi in List1:
Ligne 26: Ligne 39:
  
 The not in method takes three lines (not including the definition of the lists) to find the missing episodes. We can, however, do it better by using sets. The not in method takes three lines (not including the definition of the lists) to find the missing episodes. We can, however, do it better by using sets.
 +
 +print(set(List1).difference(set(List2)))
 +
 +{'S01E06', 'S01E02', 'S01E04'}**
 +
 +Une solution consiste à utiliser l'opérateur in et à parcourir chacun des éléments de la liste 1 pour voir si l'élément se trouve dans la liste 2.
 +
 +for epi in List1:
 +    if epi not in List2:
 +        print(f 'Épisode manquant {epi}')
 +
 +print('Terminé')
 +
 +résultat :
 +Épisode manquant S01E02
 +Épisode manquant S01E04
 +Épisode manquant S01E06
 +Terminé
 +
 +
 +La méthode not in prend trois lignes (sans compter la définition des listes) pour trouver les épisodes manquants. Nous pouvons cependant faire mieux en utilisant des ensembles.
  
 print(set(List1).difference(set(List2))) print(set(List1).difference(set(List2)))
Ligne 31: Ligne 65:
 {'S01E06', 'S01E02', 'S01E04'} {'S01E06', 'S01E02', 'S01E04'}
  
-Using sets, we can do the same thing much quicker, and with only one line of code. The difference method will show all the items from set(a) which are not in set(b). What happens if we reverse the sets in the difference statement, comparing List2 to List1? Since every item in List2 is in List1, we get an empty set returned to us.+ 
 +**Using sets, we can do the same thing much quicker, and with only one line of code. The difference method will show all the items from set(a) which are not in set(b). What happens if we reverse the sets in the difference statement, comparing List2 to List1? Since every item in List2 is in List1, we get an empty set returned to us.
  
 print(set(List2).difference(set(List1)) print(set(List2).difference(set(List1))
Ligne 43: Ligne 78:
 {'S01E08', 'S01E03', 'S01E07', 'S01E05', 'S01E01'} {'S01E08', 'S01E03', 'S01E07', 'S01E05', 'S01E01'}
  
-You can see that the set is just five items rather than the six we defined, so the duplicate S01E03 is excluded. Also notice that, as we saw in the definition of a set, the order is totally different from what we defined in the list.+You can see that the set is just five items rather than the six we defined, so the duplicate S01E03 is excluded. Also notice that, as we saw in the definition of a set, the order is totally different from what we defined in the list.**
  
-You can also use a shortened version of our set difference statement. To do this, we use the - operator.+En utilisant les ensembles, nous pouvons faire la même chose beaucoup plus rapidement et avec une seule ligne de code. La méthode difference montrera tous les éléments de l'ensemble (a) qui ne sont pas dans l'ensemble (b). Que se passe-t-il si nous inversons les ensembles dans l'instruction difference, en comparant List2 à List1 ? Puisque chaque élément de List2 se trouve dans List1, nous obtenons un ensemble vide. 
 + 
 +print(set(List2).difference(set(List1)) 
 + 
 +set() 
 + 
 +Maintenant, qu'est-ce qu'un ensemble exactement ? En Python, un ensemble est défini comme « une collection non ordonnée d'éléments. Chaque élément est unique au sein de l'ensemble ». Si vous vous en souvenez, List2 contient S01E03 en double, alors à quoi ressemble List2 lorsqu'elle est convertie en ensemble ? 
 + 
 +print(set(List2)) 
 + 
 +{'S01E08', 'S01E03', 'S01E07', 'S01E05', 'S01E01'
 + 
 +Vous pouvez constater que l'ensemble ne comprend que cinq éléments au lieu des six que nous avons définis, ce qui exclut le doublon S01E03. Remarquez également que, comme nous l'avons vu dans la définition d'un ensemble, l'ordre est totalement différent de celui que nous avons défini dans la liste. 
 + 
 + 
 +**You can also use a shortened version of our set difference statement. To do this, we use the - operator.
  
 print(set(List1) - set(List2)) print(set(List1) - set(List2))
Ligne 65: Ligne 115:
  
 We have many other methods available to us that work with sets. They include intersection, union, symmetrical difference. For the use of the next examples, we will use the following values. We have many other methods available to us that work with sets. They include intersection, union, symmetrical difference. For the use of the next examples, we will use the following values.
 +
 +SetA={1,2,3,4,5}
 +SetB={5,6,7,8,9}**
 +
 +Vous pouvez également utiliser une version abrégée de notre instruction set difference. Pour ce faire, nous utilisons l'opérateur « - ».
 +
 +print(set(List1) - set(List2))
 +
 +Que pouvons-nous faire d'autre avec un ensemble ? Nous pouvons ajouter un élément à un ensemble et, également, en supprimer un.
 +
 +set1 = set(List1)
 +set1.add('S01E09')
 +print(set1)
 +
 +{'S01E04', 'S01E05', 'S01E01', 'S01E06', 'S01E02', 'S01E08', 'S01E09', 'S01E07', 'S01E03'}
 +
 +set2 = set(List2)
 +set2.discard('S01E05')
 +print(set2)
 +{'S01E01', 'S01E03', 'S01E07', 'S01E08'}
 +
 +L'opérateur add ne fonctionne qu'avec un seul élément. Il existe un opérateur update qui permet d'ajouter plusieurs éléments, qui peuvent être une liste, des chaînes de caractères, des tuples et d'autres ensembles. Vous pouvez également utiliser remove pour supprimer des éléments. Toutefois, si l'élément à supprimer ne fait pas partie de l'ensemble, discard() ne renverra pas d'erreur, mais remove() en sortira une.
 +
 +Nous disposons de nombreuses autres méthodes qui fonctionnent avec les ensembles. Elles incluent l'intersection, l'union, la différence symétrique. Pour les exemples suivants, nous utiliserons les valeurs suivantes :
  
 SetA={1,2,3,4,5} SetA={1,2,3,4,5}
 SetB={5,6,7,8,9} SetB={5,6,7,8,9}
  
-Union+ 
 +**Union
  
 The union method returns all items from both Set A and Set B. For example: The union method returns all items from both Set A and Set B. For example:
Ligne 86: Ligne 161:
  
 You can also use the operator - to perform the difference operation. You can also use the operator - to perform the difference operation.
 +
 +SetA - SetB**
 +
 +Union
 +
 +La méthode union renvoie tous les éléments de l'ensemble A et de l'ensemble B. Par exemple :
 +
 +SetA.union(SetB) renvoie {1,2,3,4,5,6,7,8,9}
 +
 +Remarquez que la valeur 5 figure dans les deux ensembles, mais comme un ensemble ne peut pas inclure de doublons, elle ne figure qu'une seule fois dans l'union. Vous pouvez également utiliser l'opérateur | pour effectuer l'opération d'union.
 +
 +SetA | SetB
 +
 +Difference
 +
 +Nous avons déjà vu la méthode difference plus tôt. Elle renvoie les valeurs qui sont dans l'ensemble A et qui ne sont pas dans l'ensemble B.
 +
 +SetA.difference(SetB) renvoie {1, 2, 3, 4}
 +
 +Vous pouvez également utiliser l'opérateur - pour effectuer l'opération de différence.
  
 SetA - SetB SetA - SetB
  
-Intersection+ 
 +**Intersection 
 Intersection returns only the values that are in BOTH SetA and SetB. Intersection returns only the values that are in BOTH SetA and SetB.
  
Ligne 112: Ligne 209:
 >>> MyList = [1,2,3,4,5,6] >>> MyList = [1,2,3,4,5,6]
 >>> print(MyList[4]) >>> print(MyList[4])
 +
 +5
 +>>>**
 +
 +Intersection
 +
 +L'intersection renvoie uniquement les valeurs qui se trouvent à la fois dans SetA et SetB.
 +
 +SetA.intersection(SetB) renvoie {5}
 +
 +Vous pouvez également utiliser l'opérateur & pour effectuer l'opération d'intersection.
 +
 +SetA & SetB
 +
 +Différence symétrique
 +
 +La méthode de différence symétrique renvoie toutes les valeurs de SetA et SetB qui ne sont pas dans les deux.
 +
 +SetA.symmetric_difference(SetB) renvoie {1, 2, 3, 4, 6, 7, 8, 9}.
 +
 +Vous pouvez également utiliser l'opérateur ^ pour effectuer l'opération de différence symétrique
 +
 +SetA ^ SetB
 +
 +Les ensembles n'ont pas d'index comme les listes. Ainsi, alors, vous pouvez faire quelque chose comme
 +
 +>>> MaListe = [1,2,3,4,5,6]
 +>>> print(MaListe[4])
  
 5 5
 >>> >>>
  
-If you tried that with a set, the attempt will fail.+ 
 +**If you tried that with a set, the attempt will fail.
  
 >>> myset={1,2,3,4,5,6} >>> myset={1,2,3,4,5,6}
Ligne 147: Ligne 273:
 >>> >>>
  
-SetC is not a subset of SetA, since SetC contains the value of 10 and SetA does not. In the same way SetA is not a superset of SetC.+SetC is not a subset of SetA, since SetC contains the value of 10 and SetA does not. In the same way SetA is not a superset of SetC.**
  
-Frozenset+Si vous essayez cela avec un ensemble, la tentative échouera. 
 + 
 +>>> myset={1,2,3,4,5,6} 
 +>>> print(myset[4]) 
 +Traceback (most recent call last): 
 +  File "<stdin>", line 1, in <module> 
 +TypeError: 'set' object is not subscriptable 
 + 
 +'set' object is not subscriptable  # l'objet 'set' n'est pas indexable 
 +>>> 
 + 
 +Il existe également les méthodes issuperset() et issubset(). SetA est considéré comme un sur-ensemble (superset) s'il contient tous les éléments de SetB. L'ensemble B est considéré comme un sous-ensemble (subset) de l'ensemble A si tous ses éléments sont dans l'ensemble A. 
 + 
 +>>> SetA={1,2,3,4,5,6,7,8} 
 +>>> SetB={1,2,3,4} 
 +>>> SetA.issuperset(SetB) 
 +True # Vrai 
 +>>> SetB.issuperset(SetA) 
 +False # Faux 
 +>>> SetB.issubset(SetA) 
 +True 
 + 
 +Cependant, considérez la situation suivante : 
 + 
 +>>> SetC={1,2,3,4,10} 
 +>>> SetC.issubset(SetA) 
 +Faux 
 +>>> SetA.issuperset(SetC) 
 +False 
 +>>> 
 + 
 +SetC n'est pas un sous-ensemble de SetA, car SetC contient la valeur 10 et SetA ne la contient pas. De la même manière, SetA n'est pas un sur-ensemble de SetC. 
 + 
 + 
 +**Frozenset
  
 Frozenset is a class that has many of the same characteristics of a set, but a frozenset is immutable so there are no add or remove methods. Frozenset is a class that has many of the same characteristics of a set, but a frozenset is immutable so there are no add or remove methods.
Ligne 177: Ligne 337:
 There is a lot more that you can do with sets, but I wanted to cover the basics. I hope that you can see how beneficial sets can be for you. There is a lot more that you can do with sets, but I wanted to cover the basics. I hope that you can see how beneficial sets can be for you.
  
-Until next time, as always; stay safe, healthy, positive and creative!+Until next time, as always; stay safe, healthy, positive and creative!** 
 + 
 +Frozenset 
 + 
 +Un frozenset est une classe qui possède les mêmes caractéristiques qu'un ensemble, mais un frozenset est immuable et il n'y a donc pas de méthodes d'ajout ou de suppression. 
 + 
 +>>> SetA=frozenset([1,2,3,4,6]) 
 +>>> SetB=frozenset([5,6,7,8,9]) 
 +>>> SetA | SetB 
 +frozenset({1, 2, 3, 4, 5, 6, 7, 8, 9}) 
 + 
 +>>> SetA - SetB 
 +frozenset({1, 2, 3, 4}) 
 + 
 +>>> SetA & SetB 
 +frozenset({6}) 
 + 
 +>>> SetA ^ SetB 
 +frozenset({1, 2, 3, 4, 5, 7, 8, 9}) 
 + 
 +>>> SetA.add(10) 
 +Traceback (most recent call last): 
 +  File "<stdin>", line 1, in <module> 
 +AttributeError: 'frozenset' object has no attribute 'add' 
 + 
 +'frozenset' object has no attribute 'add' # L'objet 'frozenset' n'a pas d'attribut 'add'
 +>>> 
 + 
 +Il y a beaucoup d'autres choses que vous pouvez faire avec les ensembles, mais je voulais présenter les bases. J'espère que vous pouvez voir à quel point les ensembles peuvent être bénéfiques pour vous. 
 + 
 +Jusqu'à la prochaine fois, et comme toujours, restez en sécurité, en bonne santé, positif et créatif ! 
  
issue174/python.1635700998.txt.gz · Dernière modification : 2021/10/31 18:23 de auntiee