Teste básico e não muito extenso, comparando o tempo de execução das cinco respostas fornecidas:
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]
usando a seguinte entrada:
a = range(0, 10000000)
b = range(500, 500000)
loop python simples foi o mais rápido com a operação lambda por um segundo próximo, mapIndexValues e getIndexValues eram consistentemente bastante semelhantes ao método numpy significativamente mais lento após a conversão de listas em matrizes numpy.Se os dados já estiverem em matrizes numpy, o método numpyIndexValues com a conversão numpy.array removida é mais rápido.
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