Utilisation avancée des conteneurs
Un conteneur de plus : set
Un set est non ordonné et ne contient qu’une seule occurrence de chacun de ses éléments (non duplication).
[1]:
# construction littéral
{1, 2, 'toto', 2, 3.14}
[1]:
{1, 2, 3.14, 'toto'}
Les opérations d’ensembles sont disponibles
[2]:
# union
{2, 3, 4} | {1, 2}
[2]:
{1, 2, 3, 4}
[3]:
# intersection
{2, 3, 4} & {1, 2}
[3]:
{2}
[4]:
# différence
{2, 3, 4} - {1, 2}
[4]:
{3, 4}
[5]:
# différence symétrique
{2, 3, 4} ^ {1, 2}
[5]:
{1, 3, 4}
[6]:
# une manière d'enlever les doublons d'une liste
l = [1, 2, 3, 2, 4, 1, 4]
set(l)
[6]:
{1, 2, 3, 4}
Les méthodes des conteneurs de base
[7]:
def compare_methodes(type1, type2):
build_attr = lambda type_: set(e for e in dir(type_) if e[0] != '_')
attr1 = build_attr(type1)
attr2 = build_attr(type2)
print(f'* méthodes communes à {type1.__name__} et {type2.__name__}:')
print(list(attr1 & attr2))
print()
print(f'* méthodes propres à {type1.__name__} :')
print(list(attr1 - attr2))
print()
print(f'* méthodes propres à {type2.__name__} :')
print(list(attr2 - attr1))
list vs tuple
[8]:
compare_methodes(list, tuple)
* méthodes communes à list et tuple:
['count', 'index']
* méthodes propres à list :
['pop', 'append', 'extend', 'sort', 'remove', 'copy', 'reverse', 'insert', 'clear']
* méthodes propres à tuple :
[]
[9]:
help(list.append)
Help on method_descriptor:
append(self, object, /)
Append object to the end of the list.
[10]:
help(list.extend)
Help on method_descriptor:
extend(self, iterable, /)
Extend list by appending elements from the iterable.
list vs dict
[11]:
compare_methodes(list, dict)
* méthodes communes à list et dict:
['pop', 'clear', 'copy']
* méthodes propres à list :
['append', 'index', 'extend', 'sort', 'remove', 'count', 'reverse', 'insert']
* méthodes propres à dict :
['values', 'get', 'items', 'keys', 'fromkeys', 'setdefault', 'popitem', 'update']
[12]:
help(dict.get)
Help on method_descriptor:
get(self, key, default=None, /)
Return the value for key if key is in the dictionary, else default.
[13]:
help(dict.setdefault)
Help on method_descriptor:
setdefault(self, key, default=None, /)
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
[14]:
help(dict.update)
Help on method_descriptor:
update(...)
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
list vs set
[15]:
compare_methodes(list, set)
* méthodes communes à list et set:
['clear', 'pop', 'remove', 'copy']
* méthodes propres à list :
['append', 'index', 'extend', 'sort', 'count', 'reverse', 'insert']
* méthodes propres à set :
['difference', 'add', 'union', 'symmetric_difference', 'isdisjoint', 'discard', 'intersection', 'intersection_update', 'issubset', 'issuperset', 'symmetric_difference_update', 'difference_update', 'update']
[16]:
help(set.add)
Help on method_descriptor:
add(...)
Add an element to a set.
This has no effect if the element is already present.
dict vs set
[17]:
compare_methodes(dict, set)
* méthodes communes à dict et set:
['pop', 'update', 'clear', 'copy']
* méthodes propres à dict :
['values', 'get', 'items', 'keys', 'fromkeys', 'setdefault', 'popitem']
* méthodes propres à set :
['difference', 'add', 'union', 'symmetric_difference', 'isdisjoint', 'discard', 'intersection', 'intersection_update', 'issubset', 'issuperset', 'remove', 'symmetric_difference_update', 'difference_update']