Как найти индекс в одномерном массиве представив что он двумерный?
есть матрица
5 2 9 6
3 8 4 0
1 13 12 11
10 14 7 15
Надо найти индекс числа 11 в строке 3 Матрицами numpy это легко вычисляется но при большом количестве циклов скорость медленная поэтому надо решение для одномерного массива
x=[5,2,9,6,3,8,4,0,1,13,12,11,10,14,7,15]
строка_нахождения=(x.index(11)//4)+1
индекс_этой_строки=????
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
myList = [5, 2, 9, 6,
3, 8, 4, 0,
1, 13, 12, 11,
10, 14, 7, 15]
def search_local_index(x, number):
num_index = x.index(number)
columns = 4
row_index = num_index // columns
local_index = num_index % columns
print(f"Число {number} находится в строке по индексу {row_index} с локальным индексом {local_index}.")
search_local_index(myList, 11)
Вывод:
Число 11 находится в строке по индексу 2 с локальным индексом 3.
[Program finished]
Из минусов - это то что каждый раз придётся всё вычислять, а это не очень оптимизированно.
Чтобы не выполнять функцию каждый раз заново - составим словарь:
myList = [5, 2, 9, 6, 3, 8, 4, 0, 1, 13, 12, 11, 10, 14, 7, 15]
sorted_list = sorted(myList)
def build_index_dict(x, columns):
index_dict = {}
for i, value in enumerate(x):
row_index = i // columns
local_index = i % columns
index_dict[value] = (row_index, local_index)
return index_dict
dict_index= build_index_dict(sorted_list, 4)
print(dict_index)
Вывод:
{0: (0, 0), 1: (0, 1), 2: (0, 2), 3: (0, 3), 4: (1, 0), 5: (1, 1), 6: (1, 2), 7: (1, 3), 8: (2, 0), 9: (2, 1), 10: (2, 2), 11: (2, 3), 12: (3, 0), 13: (3, 1), 14: (3, 2), 15: (3, 3)}
[Program finished]