Files
org-roamings/20220528104202-set_et_frozenset.org
2022-06-04 12:57:39 +02:00

2.7 KiB

Set et frozenset

Set

Un set est un ensemble mutable et non ordonné d'éléments uniques.

groceries = {"milk", "cheese", "chocolate"}
print(f'{groceries = }')
groceries = {'milk', 'chocolate', 'cheese'}

Egalité

L'ordre n'a pas d'impact sur l'égalité entre deux set :

groceries = {"milk", "cheese", "chocolate"}
print(f'{set(["milk", "cheese", "chocolate"])==set(["chocolate", "milk", "cheese"]) = }')
set(["milk", "cheese", "chocolate"])==set(["chocolate", "milk", "cheese"]) = True

Set comprehension

veggies = ["broccoli", "carrot", "tomato", "pepper", "lettuce"]
veggies_with_c = {veggie for veggie in veggies if "c" in veggie}

print(f'{veggies = }')
print(f'{veggies_with_c = }')
veggies = ['broccoli', 'carrot', 'tomato', 'pepper', 'lettuce']
veggies_with_c = {'carrot', 'lettuce', 'broccoli'}

Opérations sur les set

L'intersection entre des set est réalisée avec l'opérateur &

groceries = {"milk", "cheese", "chocolate"}
treats = {"chocolate", "popcorn", "cookie"}

print(f'{groceries & treats = }')
groceries & treats = {'chocolate'}

L'union entre des set est réalisée avec l'opérateur |

groceries = {"milk", "cheese", "chocolate"}
treats = {"chocolate", "popcorn", "cookie"}

print(f'{groceries | treats = }')
groceries | treats = {'cheese', 'popcorn', 'chocolate', 'milk', 'cookie'}

La différences entre set est réalisée avec l'opérateur -

groceries = {"milk", "cheese", "chocolate"}
treats = {"chocolate", "popcorn", "cookie"}

print(f'{groceries - treats = }')
groceries - treats = {'milk', 'cheese'}

Frozenset

A l'inverse du set, le frozenset est immutable et est donc hashable (utilisable comme clé des dict).

groceries = {"milk", "cheese", "chocolate"}
frozen_groceries = frozenset(groceries)

try:
    frozen_groceries.add("beans")
except AttributeError as e:
    print(e)

d = {}

try:
    d[groceries] = None
except TypeError as e:
    print(e)

d[frozen_groceries] = None
print(f'{d = }')
'frozenset' object has no attribute 'add'
unhashable type: 'set'
d = {frozenset({'chocolate', 'milk', 'cheese'}): None}