Не получается заполнить двумерный массив с помощью for

c = 3
st = [[0,0]]*c
for i in range (0,c ):
    a = int(input())
    b = int(input())
    st[i][0] = a
    st[i][1] = b
print(st)

Данный код при вводе например

3 1 2 0 0 4 выводит [[0, 4], [0, 4], [0, 4]], а не ожидаемое мной [[3, 1], [2, 0], [0, 4]]. Вопрос наверное глупый, но я не понимаю - почему так? i же не успевает проскочить и обновить все элементы массива?


Ответы (3 шт):

Автор решения: finally

почему не сделать это вот так?

array = []
size = int(input('size'))
for i in range(size):
    buff = []
    for j in range(2):
        value = int(input('value'))
        buff.append(value)
    array.append(buff)
→ Ссылка
Автор решения: Valera
c = 3
st = []

for i in range(c):
    a = int(input())
    b = int(input())
    st.extend([[a, b]])
    
print(st)

Ваш цикл перезаписывает элементы вложенного списка каждый раз

→ Ссылка
Автор решения: CrazyElf

Чтобы при инициализации получались разные списки, а не копии одного и того же списка (как в вашем случае), её обычно делают так:

st = [[0,0] for _ in range(c)]

_ здесь - конвенциональное название переменной, которая синтаксически нужна в коде, но её значение нигде не используется.

→ Ссылка