Aller au contenu

Collections#

courant

list — méthodes#

l = [3, 1, 2]
l.append(4); l.extend([5, 6]); l.insert(0, 9)
l.remove(9)           # 1ère occurrence, ValueError si absent
l.pop(); l.pop(0)       # retire et renvoie (dernier / index donné)
l.index(2); l.count(2)
l.sort(key=None, reverse=False); l.reverse(); l.copy(); l.clear()

dict — méthodes#

d = {"a": 1, "b": 2}
d.get("a", 0); d.setdefault("c", 0)
d.pop("a", None); d.popitem()          # retire le dernier élément inséré
d.update({"b": 20}); d.copy(); d.clear()
d.keys(); d.values(); d.items()
{k: v for k, v in d.items() if v > 0}    # filtrage

set — méthodes#

s = {1, 2, 3}
s.add(4)                 # ajoute un élément
s.update([5, 6])          # ajoute plusieurs éléments
s.discard(9)               # retire si présent, silencieux sinon
s.remove(5)                 # retire, lève KeyError si absent
s.pop()                      # retire et renvoie un élément arbitraire (set non ordonné)
s.clear()

s.union(t); s.intersection(t); s.difference(t); s.symmetric_difference(t)
s.issubset(t); s.issuperset(t); s.isdisjoint(t)

Piège

{} crée un dictionnaire vide, pas un ensemble vide : utiliser set().

collections.Counter#

from collections import Counter
c = Counter("abracadabra")
c.most_common(2)     # [('a', 5), ('b', 2)]
c["a"]                 # 5
c.update("aaa")

collections.defaultdict#

from collections import defaultdict
groupes = defaultdict(list)
for nom in ["ana", "bo", "aya"]:
    groupes[nom[0]].append(nom)   # pas de KeyError, liste vide créée au besoin

collections.namedtuple#

from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(1, 2)
p.x; p.y; p[0]

collections.deque avancé#

from collections import deque
d = deque([1, 2, 3])
d.appendleft(0); d.append(4)
d.popleft(); d.pop()
# O(1) aux deux extrémités, contrairement à list.insert(0, x) qui est O(n)

Tri avancé#

personnes = [{"nom": "Ana", "age": 30}, {"nom": "Bo", "age": 25}]
sorted(personnes, key=lambda p: p["age"])
sorted(personnes, key=lambda p: (-p["age"], p["nom"]))   # tri multi-critères