In python docs posso vedere che deque è una collezione speciale altamente ottimizzata per l'inserimento/aggiunta di elementi dal lato sinistro o destro. Per esempio. documentazione dice:python: confronto tra prestazioni deque vs list
deque sono una generalizzazione delle pile e code (il nome è pronunciato “ponte” ed è l'abbreviazione di “Deque”). Deques supportano threaded safe, appends e pop efficienti dal lato della deque con circa le stesse prestazioni O (1) in in entrambe le direzioni.
Sebbene Lista oggetti supportano operazioni simili, sono ottimizzati per operazioni rapido a lunghezza fissa e comportano O spedizione (n) di movimento della memoria per pop (0) e inserire (0, v) che modificano sia la dimensione e posizione della rappresentazione dei dati sottostanti.
Ho deciso di effettuare alcuni confronti utilizzando ipython. Qualcuno mi potrebbe spiegare che cosa ho fatto di sbagliato qui:
In [31]: %timeit range(1, 10000).pop(0)
10000 loops, best of 3: 114 us per loop
In [32]: %timeit deque(xrange(1, 10000)).pop()
10000 loops, best of 3: 181 us per loop
In [33]: %timeit deque(range(1, 10000)).pop()
1000 loops, best of 3: 243 us per loop
Ci vuole O (n) tempo per creare un oggetto 'deque' da un elenco (come' intervallo' o 'xrange'). –
Cosa intendi con "sbagliato"? Cosa ti aspettavi che accadesse? – freakish
Accetto con @JayanthKoushik, ora '.pop' dopo aver creato sia la lista che la deque. – vaultah