Search code examples
pythonarraysmultidimensional-arraymatrixsetting

Setting values in matrices - Python


I made i matrix 5x3

field = []
fields = []
    for i in range(0,5):
        for j in range(0,3):
            x = 1
            field.append(x)
    fields.append(field)

When i want to change one field

fields[2][2] = 0

i get this:

fields[0][0] = 1
fields[0][1] = 1
fields[0][2] = **0**
fields[1][0] = 1
fields[1][1] = 1
fields[1][2] = **0**
fields[2][0] = 1
fields[2][1] = 1
fields[2][2] = **0**
fields[3][0] = 1
fields[3][1] = 1
fields[3][2] = **0**
fields[4][0] = 1
fields[4][1] = 1
fields[4][2] = **0**

Instead one change i am getting five


Solution

  • Its because you have the reference to the same field across all rows.

    You want this:

    for i in range(0,5):
        field = []
        for j in range(0,3):
            x = 1
            field.append(x)
        fields.append(field)
    

    field should get reset for every row. That's why you should have it inside the first loop. Now your fields[2][2] = 0 would work.

    >>> fields
    [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
    >>> fields[2][2] = 0
    >>> fields
    [[1, 1, 1], [1, 1, 1], [1, 1, 0], [1, 1, 1], [1, 1, 1]]