Adresse : http://docs.python.org/3.3/library/collections.html#collections.deque
Syntaxe : from collections import deque
La classe deque permet de créer des listes à double entrée (à gauche et à droite). Les objets de la liste peuvent ainsi être ajoutés ou retirés, soit à gauche soit à droite, et en temps constant (on rappelle que les objets habituels de type list ne sont accessibles en temps constant qu’en une seule extrémité). Le constructeur deque accepte un itérable (et en argument optionnel une longueur maximum n, par défaut n est “infini”). Si n est précisé, et quand la liste atteint sa longueur maximum, l’ajout d’éléments à gauche (resp. à droite) provoque la “sortie” d’autant d’éléments à droite (resp. à gauche). Voici un échantillon des fonctions disponibles, à partir d’un exemple simple :
|
1 2 3 |
>>> from collections import deque # import la classe deque du module collections >>> dq = deque([3,7,2],10); dq # liste à double entrée, longueur maximum 10 deque([3, 7, 2], maxlen=10) |
On peut ajouter un ou plusieurs éléments, soit à droite, soit à gauche (attention à l’ordre à gauche) :
|
1 2 3 4 5 6 7 8 9 10 |
>>> dq.append(8); dq # on ajoute 8 à droite deque([3, 7, 2, 8], maxlen=10) >>> dq.appendleft(1); dq # on ajoute 1 à gauche deque([1, 3, 7, 2, 8], maxlen=10) >>> dq.extend(['a','b','c','d']); dq # on étend par a,b,c,d à droite deque([1, 3, 7, 2, 8, 'a', 'b', 'c','d'], maxlen=10) >>> len(dq), maxlen(dq) # longueur actuelle, longueur maximum (9, 10) >>> dq.extendleft(['x','y','z']); dq # complète à gauche par x,y,z: c,d sortent à droite deque(['z', 'y', 'x', 1, 3, 7, 2, 8, 'a', 'b'], maxlen=10) |
On peut “popper” un élément à gauche, ou à droite :
|
1 2 3 4 5 6 |
>>> dq.pop(); dq # renvoie et efface l'élément le plus à droite 'b' deque(['z', 'y', 'x', 1, 3, 7, 2, 8, 'a'], maxlen=10) >>> dq.popleft(); dq # renvoie et efface l'élément le plus à gauche 'z' deque(['y', 'x', 1, 3, 7, 2, 8, 'a'], maxlen=10) |
On peut supprimer n’importe quel élément, ou tester l’appartenance :
|
1 2 3 4 5 6 7 8 |
>>> dq.remove(7); dq # retire la première occurrence d'un élément deque(['y', 'x', 1, 3, 2, 8, 'a'], maxlen=10) >>> 7 in dq # on voit que 7 n'est plus dans la liste False >>> del(dq[4]); dq # supprime le quatrième élément deque(['y', 'x', 1, 3, 8, 'a'], maxlen=10) >>> dq[1], dq[-2] # le deuxième élément, l'avant-dernier ('x', 8) |
On peut renverser l’ordre, faire tourner, convertir au format liste “habituel” :
|
1 2 3 4 5 6 7 8 9 10 |
>>> dq.reverse(); dq # inverse l'ordre deque(['a', 8, 3, 1, 'x', 'y'], maxlen=10) >>> dq.rotate(2); dq # rotation de deux positions vers la droite deque(['x', 'y', 'a', 8, 3, 1], maxlen=10) >>> dq.rotate(-3); dq # rotation de trois positions vers la gauche deque([8, 3, 1, 'x', 'y', 'a'], maxlen=10) >>> list(dq) # convertit en liste au sens usuel [8, 3, 1, 'x', 'y', 'a'] >>> list(reversed(dq)) # liste usuelle, à partir d'une copie inversée ['a', 'y', 'x', 1, 3, 8] |
Retour à l’accueil du cours Python/Numpy
Sommaire du chapitre 7
- Le module random
- Le module decimal
- Le module fractions
- Le module string
- Le module itertools
- Les modules operator et functools
- Le module time
- La classe Counter du module collections
- La classe deque du module collections
- Le module heapq
- Le module bisect
- Le module copy
- Autres modules et adresses utiles