[Python-ideas] Reimplementing collections.deque as a dynamic array
Cameron Simpson
cs at zip.com.au
Tue May 29 09:04:44 CEST 2012
On 29May2012 00:46, Julian Berman <julian at grayvines.com> wrote:
| I've occasionally had a need for a container with constant-time append
| to both ends without sacrificing constant-time indexing in the middle.
| collections.deque will in these cases narrowly miss the target due to
| linear indexing (with the current use case being for two deques
| storing the lines of text surrounding the cursor in a text editor
| while still being randomly indexed occasionally).
|
| Wikipedia lists at least two common deque implementations:
|
| http://en.wikipedia.org/wiki/Double-ended_queue#Implementations
|
| where switching to a dynamic array would seemingly satisfy my requirements.
|
| I know from a bit of experience (and a quick SO perusal) that "How do
| I index a deque" does occasionally come up. Any thoughts on the value
| of such a change?
It was pointed out to me recently that Python's list.append() is constant
time overall.
Use two lists, one for append-forward and one for append backward. Keep
track of the bound. Access to item "i" is trivially computed from the
backward and forward list sizes and ends.
Cheers,
--
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/
The mere existence of a problem is no proof of the existence of a solution.
- Yiddish Proverb
More information about the Python-ideas
mailing list