Я пытаюсь выполнить поиск в массиве Python 2D, циклически перебирая строки массива и проверяя, соответствуют ли значения внутри условия условию. Пример здесь:
def searchList(list, v0, v1, v2, v3):
for r in range(len(list)):
if (list[r][0] == v0) & (list[r][1] == v1) & (list[r][2] == v2) & (list[r][3] == v3):
return r
return None
Это, однако, довольно медленно в Python по сравнению с другими языками.
Теперь основная проблема заключается в том, что этот список динамически растет и может содержать 1000 или более строк.
Когда я вышел в интернет, чтобы найти способ сделать это быстрее, я обнаружил, что переместил список в пустую матрицу и с помощью np.where()
мог бы сделать это.
def searchList(list, v0, v1, v2, v3):
tmpQ = np.array(list)
locList = np.where((tmpQ[:,0] == v0) & (tmpQ[:,1] == v1) & (tmpQ[:,2] == v2) & (tmpQ[:,3] == v3))
if locList[0].size == 0:
return None
else:
return locList[0][0]
Теперь проблема заключается в том, что преобразование двумерного массива python в матрицу numpy состоит в том, что эта операция также занимает много времени.
Мой другой вариант - избавиться от двумерного массива python и использовать только пустую матрицу, однако это также не работает, поскольку матрица продолжает расти, операция конкатенации занимает много времени.
Есть ли способ сделать это быстро?
Я знаю, что является причиной того, что больше всего времени занимает использование cProfile и запуск кода.