Основне і не дуже обширне тестування, порівнюючи час виконання п'яти наданих відповідей:
def numpyIndexValues(a, b):
na = np.array(a)
nb = np.array(b)
out = list(na[nb])
return out
def mapIndexValues(a, b):
out = map(a.__getitem__, b)
return list(out)
def getIndexValues(a, b):
out = operator.itemgetter(*b)(a)
return out
def pythonLoopOverlap(a, b):
c = [ a[i] for i in b]
return c
multipleListItemValues = lambda searchList, ind: [searchList[i] for i in ind]
використовуючи наступний вхід:
a = range(0, 10000000)
b = range(500, 500000)
простий цикл python був найшвидшим, коли операція лямбда була близькою секундою, mapIndexValues і getIndexValues постійно були схожі на метод numpy значно повільніше після перетворення списків у numpy масиви. Якщо дані вже є в numpy масивах, метод numpyIndexValues видалено з перетворенням numpy.array найшвидший.
numpyIndexValues -> time:1.38940598 (when converted the lists to numpy arrays)
numpyIndexValues -> time:0.0193445 (using numpy array instead of python list as input, and conversion code removed)
mapIndexValues -> time:0.06477512099999999
getIndexValues -> time:0.06391049500000001
multipleListItemValues -> time:0.043773591
pythonLoopOverlap -> time:0.043021754999999995