107 lines
2.7 KiB
Org Mode
107 lines
2.7 KiB
Org Mode
:PROPERTIES:
|
|
:ID: cc0e3fd0-2832-4bf6-909f-354507f7ed11
|
|
:mtime: 20220528110155
|
|
:ctime: 20220528104202
|
|
:END:
|
|
#+title: Set et frozenset
|
|
|
|
* /Set/
|
|
Un /set/ est un ensemble /mutable/ et non ordonné d'éléments uniques.
|
|
#+BEGIN_SRC python :results output
|
|
groceries = {"milk", "cheese", "chocolate"}
|
|
print(f'{groceries = }')
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: groceries = {'milk', 'chocolate', 'cheese'}
|
|
|
|
** Egalité
|
|
L'ordre n'a pas d'impact sur l'égalité entre deux /set/ :
|
|
#+BEGIN_SRC python :results output
|
|
groceries = {"milk", "cheese", "chocolate"}
|
|
print(f'{set(["milk", "cheese", "chocolate"])==set(["chocolate", "milk", "cheese"]) = }')
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: set(["milk", "cheese", "chocolate"])==set(["chocolate", "milk", "cheese"]) = True
|
|
|
|
** /Set comprehension/
|
|
#+BEGIN_SRC python :results output
|
|
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 = }')
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: 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 ~&~
|
|
#+BEGIN_SRC python :results output
|
|
groceries = {"milk", "cheese", "chocolate"}
|
|
treats = {"chocolate", "popcorn", "cookie"}
|
|
|
|
print(f'{groceries & treats = }')
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: groceries & treats = {'chocolate'}
|
|
|
|
*** L'union entre des /set/ est réalisée avec l'opérateur ~|~
|
|
#+BEGIN_SRC python :results output
|
|
groceries = {"milk", "cheese", "chocolate"}
|
|
treats = {"chocolate", "popcorn", "cookie"}
|
|
|
|
print(f'{groceries | treats = }')
|
|
#+END_SRC
|
|
|
|
#+results:
|
|
: groceries | treats = {'cheese', 'popcorn', 'chocolate', 'milk', 'cookie'}
|
|
|
|
*** La différences entre /set/ est réalisée avec l'opérateur ~-~
|
|
#+BEGIN_SRC python :results output
|
|
groceries = {"milk", "cheese", "chocolate"}
|
|
treats = {"chocolate", "popcorn", "cookie"}
|
|
|
|
print(f'{groceries - treats = }')
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: groceries - treats = {'milk', 'cheese'}
|
|
|
|
* /Frozenset/
|
|
A l'inverse du /set/, le /frozenset/ est /immutable/ et est donc /hashable/ (utilisable comme clé des /dict/).
|
|
|
|
#+BEGIN_SRC python :results output
|
|
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 = }')
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: 'frozenset' object has no attribute 'add'
|
|
: unhashable type: 'set'
|
|
: d = {frozenset({'chocolate', 'milk', 'cheese'}): None}
|
|
|
|
|
|
|
|
* Références
|
|
* [[https://mathspp.com/blog/pydonts/set-and-frozenset][Set and frozenset - Pydon't]]
|