2.7 KiB
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}