W dokumentach Pythona widzę, że Deque jest specjalną kolekcją wysoce zoptymalizowaną do wyskakiwania/dodawania przedmiotów z lewej lub prawej strony. Na przykład. Dokumentacja mówi:python: porównanie deque vs lista
Deques są uogólnieniem stosów i kolejek (nazwa wymawiane „deck” i jest skrótem od „double-ended kolejce”). Deques obsługuje wątek bezpieczny, obsługuje pamięć i wyskakuje ze strony , z mniej więcej taką samą wydajnością O (1) w kierunku .
Choć lista obiektów wspierać podobne operacje, są zoptymalizowane dla operacji szybko stałej długości i ponosić o koszty (n) ruch pamięć dla pop (0) i wkładki (0, v) operacji, które zmieniają zarówno wielkość i pozycja reprezentacji danych podstawowych.
Postanowiłem dokonać pewnych porównań przy użyciu ipython. Czy ktoś może wyjaśnić mi, co zrobiłem źle tutaj:
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
Wykonanie O (n) czasu zajmuje utworzenie obiektu 'deque' z listy (np.' Range' lub 'xrange'). –
Co masz na myśli mówiąc "źle"? Czego się spodziewałeś? – freakish
Zgadzam się z @JayanthKoushik, czas '.pop' po utworzeniu listy i deque. – vaultah