1. list в Питоне имеет константное время доступа к элементу. Зато вставка-удаление — O(N).
2. Если уж меряем — то давайте делать это более корректно. В вашем случае первый выигрывает.
import array
import numpy
import random
import sys
import timeit
from collections import defaultdict
COUNT = 10**7
a = (list(xrange(COUNT)), tuple(xrange(COUNT)),
array.array('l', list(xrange(COUNT))),
numpy.zeros(COUNT))
def f(collection, count):
l = len(collection)
for i in xrange(count):
ind = random.randint(0, l-1)
collection[ind]
print '-' * 80
res = defaultdict(list)
for i in xrange(100):
col = random.choice(a)
res[type(col)].append(timeit.timeit("f(col, 100)", "from __main__ import f, col",
number=1000))
sys.stdout.write('.')
sys.stdout.flush()
print
for key, val in res.iteritems():
print key, sum(val) / len(val)
дает результат
——————————————————————————–
……………………………………………………………………………………….
<type ‘numpy.ndarray’> 0.18912228294
<type ‘array.array’> 0.161817329901
<type ‘tuple’> 0.174325704575
<type ‘list’> 0.173715612163
Что больше похоже на правду — все примерно равноценны.