Проблема в вашем случае заключается в том, что список инициализируется размером 0 и является пустым списком. Таким образом, когда вам нужно установить значение в некотором индексе, выдается ошибка, говорящая о том, что указанный индекс находится вне диапазона, потому что индекс не существует.
Мой подход изменяет существующий список на месте или другими словами добавляет значение.
Получите размер в качестве ввода первым
>>> rows = int(input("Enter no. of rows: "))
Enter no. of rows: 2
>>> cols = int(input("Enter no. of Columns: "))
Enter no. of Columns: 2
Создайте список и просматривайте диапазоны
>>> l = []
>>> for i in range(rows):
... row_vals = []
... for j in range(cols):
... row_vals.append(int(input(f"Enter value at {i}th row and {j}th column: ")))
... l.append(row_vals)
...
Enter value at 0th row and 0th column: 0
Enter value at 0th row and 1th column: 1
Enter value at 1th row and 0th column: 1
Enter value at 1th row and 1th column: 0
>>> l
[[0, 1], [1, 0]]