Как найти индекс в одномерном массиве представив что он двумерный?

есть матрица

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]
→ Ссылка