Ensembles

Les structure ensemblistes permettent de répondre facilement à des problématiques du genre :

Gérer des ensembles rapidement et avec peu de place en mémoire :

On peut créer des ensemble de multiples manières :

L'ensemble vide se crée avec l'instruction set(). L'instruction {} rend un dictionnaire vide.

Leur utilisation est très simple :

>>> S = set()
>>> S.add(123)
>>> S.add("une chaîne de caractères")
>>> S
{'une chaîne de caractères', 123}

On peut itérer sur les éléments d'un ensemble :

for x in {"pomme", "poire", "scoubidou"}:
    print(x)

L'ordre d'itération n'est PAS connu à l'avance : il peut changer d'une ordinateur à l'autre, et même d'une exécution à l'autre.

Ou savoir si un élément est dans l'ensemble :

>>> "poire" in {"pomme", "poire", "scoubidou"}
True
>>> "scoubidou" in {"pomme", "poire", "scoubidou"}
False

N'hésitez pas à regarder les méthodes associées aux ensembles, ils permettent de réaliser toutes les opérations courantes sur les ensembles et vous permettrons de gagner un temps fou dans vos programmes.

Attention cependant, un ensemble ne peut être constitué que d'objets qui ne peuvent pas être modifié, comme les nombres (entiers, réels ou complexe) ou encore les chaînes de caractères. Il est ainsi impossible de constituer un ensemble de listes :

>>> set([[1, 3], [2, 4]])
Traceback (most recent call last):
  File "<python-input-6>", line 1, in <module>
    set([[1, 3], [2, 4]])
    ~~~^^^^^^^^^^^^^^^^^^
TypeError: unhashable type: 'list'
>>>

L'erreur semble étrange unhashable type: 'list'. On y reviendra mais retenez pour l'instant que ceci signifie qu'on ne peut hasher qu'un objet non modifiable.

Exercice

Combien de mots différents contient le texte "coucou les gars coucou les filles" ?

Vous pourrez utiliser la méthode split des str

solution

texte = "coucou les gars coucou les filles"

mots = set()
for x in texte.split():
    mots.add(x)

print(len(mots))

Attention cependant aux caractères de ponctuation lors du split. "x, x. x ?".split() donne ['x,', 'x.', 'x', '?'].

Comptez les occurrences de chaque mot du texte "coucou les gars coucou les filles" ?

Vous pourrez utiliser la méthode split des str

solution

texte = "coucou les gars coucou les filles"

mots = dict()
for x in texte.split():
    if x in mots:
        mots[x] += 1
    else:
        mots[x] = 1

print(mots)