I am trying to get the diagonal of a matrix from a text file without using any kind of module. So the text file can have something like:
[[1,2,3],[4,5,6],[7,8,9]]
Here is my code so far:
def diagonal(filename):
with open(filename, 'r') as myfile:
data=myfile.read().split()
a=data[0].split()
a=eval(a[0])
c=len(a[0])
d=len(a)
if c==d:
diagonal=[]
c=len(a[0])
for i in range(d):
row=[0]*c
for j in range(c):
row=a[i][j]
diagonal.append(row)
return diagonal
else:
return ('Error')
This returns:
[1, 2, 3, 4]
When I want it to output:
[[1,0,0],[0,5,0],[0,0,9]]
Any ideas on how to make my code work? Thank you very much!
You can do it like this (example for your given input-list):
l = [[1,2,3],[4,5,6],[7,8,9]] #Your input-list
new_list = [] #New output-list
for arr, num in zip(l, range(len(l))):
new_arr = [0 for x in range(len(l))]
new_arr[num] = arr[num]
new_list.append(new_arr)
This is generic, so you can have a matrix of any length.
Edit: Version with enumerate:
for num, arr in enumerate(l):
new_arr = [0 for x in range(len(l))]
new_arr[num] = arr[num]
new_list.append(new_arr)