Двумерный массив. Проблема в заполнение

Рейтинг: 0Ответов: 1Опубликовано: 10.05.2023

Давно не пользовался Питоном. Сейчас он мне нужен позарез, а я не могу даже массив заполнить двумерный. Вроде проанализировал всё и пытался оформить иначе, но всё без толку. Дело в том, что при добавление в главный массив побочные, предыдущие строчки заменяются ту, что добавилась в данный момент, и в конце концов все подмассивы превращаются в тот, который добавляется в данный момент. В чём причина и где я ошибся?

A=[]
sp=[]
N=int(input("Введите размер массива NxN = "))
for i in range(N):
    sp.clear()
    for j in range(N):
        print("Введите элемент массива a[",i+1,"][",j+1,"] = ")
        new = int(input())
        sp.append(new)
    A.append(sp)
print(A)

Работа программы:

Введите размер массива NxN = 3
Введите элемент массива a[ 1 ][ 1 ] = 
1
Введите элемент массива a[ 1 ][ 2 ] = 
2
Введите элемент массива a[ 1 ][ 3 ] = 
3
Введите элемент массива a[ 2 ][ 1 ] = 
4
Введите элемент массива a[ 2 ][ 2 ] = 
5
Введите элемент массива a[ 2 ][ 3 ] = 
6
Введите элемент массива a[ 3 ][ 1 ] = 
7
Введите элемент массива a[ 3 ][ 2 ] = 
8
Введите элемент массива a[ 3 ][ 3 ] = 
9
[[7, 8, 9], [7, 8, 9], [7, 8, 9]]

Ответы

▲ 1Принят

Объект массива в python является ссылкой на ячейку памяти и добавляя его в другой массив, вы не создаёте новый массив. Так что нужно создавать новый массив на каждую строку. Вот правильный код заполнения:

A = []
N = int(input("Введите размер массива NxN = "))
for i in range(N):
    sp = []
    for j in range(N):
        print("Введите элемент массива a[", i + 1, "][", j + 1, "] = ")
        new = int(input())
        sp.append(new)
    A.append(sp)
print(A)