Код феерический.
#?!??!?!
for i in array:
for j in i:
if array.index(i)==i.index(j):
ans+=[j]
не будет работать, если в строке матрицы одно и то же число встречается дважды.
Ну и зачем перебирать столбцы, если тебе уже известен индекс столбца - он равен индексу строки? Функцию range() ты вроде уже знаешь, освой метод append() списка, заодно.
diagonal = []
for i in range(len(array)): # цикл по номерам строк матрицы
diagonal.append(array[i, i]) # берём элементы, у которых номер строки и столбца одинаков
ans[i]*m[i:]
Ты умножаешь элемент массива ans[i] на список строк чего-то по имени m. Что такое m, оно же не определено в функции?
X = []
for i in range(len(array)): # перебираем номера строк массива array
x_item = 0 # скалярное произведение будет тут
for j in range(len(diagonal)): # перебираем номера элементов диагонали
x_item += diagonal[j] * array[i, j] # добавляем очередную часть произведения
X.append(x_item)
То же самое можно записать короче, например, так:
X = []
for row in array:
X.append(sum( d*r for d, r in zip(diagonal, row) ))
Но это сложнее для понимания новичку.