Увеличение линии в матрице (Python) - проблема с «Добавить», которая заменяет элемент «Добавить» - PullRequest
0 голосов
/ 06 июля 2018

Я хочу сделать «анимацию» элемента матрицы, идущего от нижней строки к верхнему ряду матрицы. У меня есть следующий код, но что-то не требуется выполняется с функцией добавления:

import time
#size of the matrix
PixelCarac=4
#List that cointain all the matrixs
ListMatrix=[]
#matrix  filled with 0
tempo =[[0 for x in range(PixelCarac)] for y in range(PixelCarac)] 
#last line have a difference
tempo[3][0]=1
print("First step")
print(tempo)    

#making the line going up.  
for x in range(0,PixelCarac-1,1):   
    #append in the list
    ListMatrix.append(tempo)
    #display 
    print("length of the list is " + str(len(ListMatrix)))
    for elem in ListMatrix:
        print(elem)     

    #Making the line going up by recopie from 1 line to the upper one
    for i in range(0,len(tempo)-1,1):   
        tempo[i]=tempo[i+1]                     

time.sleep(20)

вывод у меня:

Первый шаг

[[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,1]

длина списка 1

[[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,1]

длина списка 2

[[0,0,0,0], [0,0,0,0], [0,0,0, 1 ], [0,0,0,1]

* * Тысяча двадцать-один [[0,0,0,0], [0,0,0,0], [0,0,0,1], [0,0,0,1] * +1022 *

длина списка 2

[[0,0,0,0], [0,0,0, 1 * * тысяча двадцать-семь], [0,0,0, 1 * 1 029 *], [0,0 , 0,1]

[[0,0,0,0], [0,0,0, 1 ], [0,0,0,1], [0,0,0,1]

[[0,0,0,0], [0,0,0,1], [0,0,0,1], [0,0,0,1]

вывод, который я хочу:

Первый шаг

[[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,1]

длина списка 1

[[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,1]

длина списка 2

[[0,0,0,0], [0,0,0,0], [0,0,0,0], [* 0 * тысячу пятьдесят-два , 0,0,1]

[[0,0,0,0], [0,0,0,0], [0,0,0,1], [0,0,0,1]

длина списка 2

[[0,0,0,0], [0,0,0, 0 * * тысяча шестьдесят-одна], [0,0,0, 0 * * 1 063], [0,0 , 0,1] * 1 064 * [[0,0,0,0], [0,0,0, 0 ], [0,0,0,1], [0,0,0,1]

[[0,0,0,0], [0,0,0,1], [0,0,0,1], [0,0,0,1]

Вопрос:

Почему функция append меняет предыдущие элементы в списке?

1 Ответ

0 голосов
/ 06 июля 2018

Не зная точно, что вы хотите, это может быть направление:

import time
#size of the matrix
PixelCarac=4
#List that cointain all the matrixs
ListMatrix=[]
#matrix  filled with 0
tempo =[[0 for x in range(PixelCarac)] for y in range(PixelCarac)]
#last line have a difference
tempo[3][3]=1
print("First step")
print(tempo)

#making the line going up.  
for x in range(0,PixelCarac-1,1):
    #append in the list
    ListMatrix.append(tempo)
    #display 
    print("length of the list is " + str(len(ListMatrix)))
    for elem in ListMatrix:
        print(elem)

    #Making the line going up by recopie from 1 line to the upper one
    #for i in range(0,len(tempo)-1,1):   
    #    tempo[i]=tempo[i+1]                     
    tempo = tempo[1:]+[tempo[3]]

time.sleep(20)

Дает:

First step
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]
length of the list is 1
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]
length of the list is 2
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]
length of the list is 3
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]
[[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1]]
...