I was writing a python function that looked something like this
def foo(some_list):
for i in range(0, len(some_list)):
bar(some_list[i], i)
so that it was called with
x = [0, 1, 2, 3, ... ]
foo(x)
I had assumed that index access of lists was O(1)
, but was surprised to find that for large lists this was significantly slower than I expected.
My question, then, is how are python lists are implemented, and what is the runtime complexity of the following
- Indexing:
list[x]
- Popping from the end:
list.pop()
- Popping from the beginning:
list.pop(0)
- Extending the list:
list.append(x)
For extra credit, splicing or arbitrary pops.