Selon mon interprétation de la documentation de Python 2.7.2 pour Built-In Types 5.7 Set Types, il devrait être possible de supprimer les éléments de l'ensemble A de l'ensemble B en passant A à set.remove(elem)
ou set.discard(elem)
À partir de la documentation pour 2.7.2:
Remarque, l'argument elem pour les méthodes
__contains__()
,remove()
etdiscard()
peut être un ensemble.
Je comprends que je peux passer un set
à remove(elem)
ou discard(elem)
et que tous ces éléments seront supprimés de l'ensemble cible. Je l'utiliserais pour faire quelque chose d'étrange comme supprimer toutes les voyelles d'une chaîne ou supprimer tous les mots communs d'un histogramme de fréquence de mots. Voici le code de test:
Python 2.7.2 (par défaut, 12 juin 2011, 14:24:46) [M...
Tapez "aide", "copyright", "crédits" ou "licence"
>>> a = set(range(10))
>>> b = set(range(5,10))
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([8, 9, 5, 6, 7])
>>> a.remove(b)
Traceback (most recent call last):
File "", line 1, in
KeyError: set([8, 9, 5, 6, 7])
>>> a.discard(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
Que je m'attends à retourner:
>>> a
set([0, 1, 2, 3, 4])
Je sais que je peux accomplir cela avec a.difference(b)
qui renvoie un nouvel ensemble; ou avec set.difference_update(other)
; ou avec les opérateurs d'ensemble a -= b
, qui modifient l'ensemble en place.
Est-ce un bug dans la documentation? set.remove(elem)
peut-il en fait ne pas prendre un ensemble comme argument? Ou la documentation fait-elle référence à des ensembles d'ensembles? Étant donné que difference_update
accomplit mon interprétation, je suppose que c'est le second cas.
Est-ce assez clair?
ÉDIT Après 3 ans de travail supplémentaire (professionnel) en Python, et étant récemment revenu sur cette question, je réalise maintenant que ce que j'essayais réellement de faire pourrait être accompli avec:
>>> c = a.difference(b)
set([0,1,2,3,4])
ce que j'essayais initialement de faire.
ÉDIT Après 4 ans de plus de développement en Python... je réalise que cette opération peut être exprimée de manière plus propre en utilisant des littéraux d'ensemble et l'opérateur -
; et qu'il est plus complet de montrer que la différence d'ensemble n'est pas commutative.
>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
set([0, 1])
>>> b-a
set([4, 5])