Search code examples
pythonfilematrixdiagonal

Diagonal of A Matrix From A Text File (No Numpy)


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!


Solution

  • 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)