Questo modulo implementa tipi di dato contenitore ad alte prestazioni. Al momento l'unico tipo di dato è una deque. Future integrazioni potranno comprendere B-tree ed heap di Fibonacci.
| [iterable]) |
I deque sono una generalizzazione delle pile e delle code (si pronuncia
``deck'' ed è l'abbreviazione di ``double-ended queue''). I deque
supportano il thread-safe ed i metodi append e pop sono efficienti nell'uso della
della memoria da entrambe le estremità del deque con
approssimativamente le stesse prestazioni O(1) in entrambe le
direzioni.
Sebbene gli oggetti list supportino operazioni
simili, i deque sono ottimizzati per operazioni veloci a lunghezza fissa e
comportano un costo di O(n) spostamenti in memoria per le
operazioni "pop(0)" e "insert(0, v)" che modificano sia la
dimensione che la posizione della rappresentazione sottostante dei
dati.
Nuovo nella versione 2.4.
Gli oggetti deque supportano i seguenti metodi:
| x) |
| x) |
| ) |
| iterable) |
| iterable) |
| ) |
| ) |
| n) |
In aggiunta ai metodi citati, i deque supportano l'iterazione, il pickling, "len(d)", "reversed(d)", "copy.copy(d)", "copy.deepcopy(d)", il controllo di appartenenza con l'operatore in ed i riferimenti del tipo "d[-1]".
Esempio:
>>> from collections import deque
>>> d = deque('ghi') # crea un nuovo deque con tre elementi
>>> for elem in d: # itera gli elementi del deque
... print elem.upper()
G
H
I
>>> d.append('j') # aggiunge un nuovo elemento
#+ all'estremità destra
>>> d.appendleft('f') # aggiunge un nuovo elemento
#+ all'estremità sinistra
>>> d # mostra il contenuto del deque
deque(['f', 'g', 'h', 'i', 'j'])
>>> d.pop() # restituisce e rimuove
#+ l'elemento più a destra
'j'
>>> d.popleft() # restituisce e rimuove
#+ l'elemento più a sinistra
'f'
>>> list(d) # elenca il contenuto del deque
['g', 'h', 'i']
>>> d[0] # punta all'elemento più a sinistra
'g'
>>> d[-1] # punta all'elemento più a destra
'i'
>>> list(reversed(d)) # elenca il contenuto del deque
#+ in ordine inverso
['i', 'h', 'g']
>>> 'h' in d # cerca nel deque
True
>>> d.extend('jkl') # aggiunge più elementi in una volta
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> d.rotate(1) # rotazione a destra
>>> d
deque(['l', 'g', 'h', 'i', 'j', 'k'])
>>> d.rotate(-1) # rotazione a sinistra
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> deque(reversed(d)) # crea un nuovo deque rovesciato
deque(['l', 'k', 'j', 'i', 'h', 'g'])
>>> d.clear() # svuota il deque
>>> d.pop() # non si può eseguire pop su un
#+ deque vuoto
Traceback (most recent call last):
File "<pyshell#6>", line 1, in -toplevel-
d.pop()
IndexError: pop from an empty deque
>>> d.extendleft('abc') # extendleft() inverte l'ordine
#+ di input
>>> d
deque(['c', 'b', 'a'])