Список изменяется при изменении Scope - PullRequest
1 голос
/ 20 марта 2020

Когда я добавляю List в a для l oop, он корректно изменяет его значение, а когда я печатаю его снаружи для l oop, его значение изменяется

arr=[]
b=[1,2,3,4,5,6,7]
for i in range(0,len(b)):
 b[i]=0
 arr.append(b)
 print(arr[i])

Здесь вывод

 [0, 2, 3, 4, 5, 6, 7]
 [0, 0, 3, 4, 5, 6, 7]
 [0, 0, 0, 4, 5, 6, 7]
 [0, 0, 0, 0, 5, 6, 7]
 [0, 0, 0, 0, 0, 6, 7]
 [0, 0, 0, 0, 0, 0, 7]
 [0, 0, 0, 0, 0, 0, 0]

А вот и

arr=[]
b=[1,2,3,4,5,6,7]
for i in range(0,len(b)):
 b[i]=0
 arr.append(b)
print(arr)  

Вывод

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

1 Ответ

2 голосов
/ 20 марта 2020

На каждой итерации вы добавляете ссылку к одному и тому же списку b к своему arr, что означает, что когда вы позже устанавливаете новые значения на ноль, вы изменяете все списки внутри arr одновременно. Чтобы избежать этого, вы можете добавить копию b к arr вместо этого, используя list(b), то есть:

arr = []
b = [1, 2, 3, 4, 5, 6, 7]
for i in range(len(b)):
   b[i] = 0
   arr.append(list(b))
print(arr) 

Это выводит:

[[0, 2, 3, 4, 5, 6, 7],
 [0, 0, 3, 4, 5, 6, 7],
 [0, 0, 0, 4, 5, 6, 7],
 [0, 0, 0, 0, 5, 6, 7], 
 [0, 0, 0, 0, 0, 6, 7],
 [0, 0, 0, 0, 0, 0, 7],
 [0, 0, 0, 0, 0, 0, 0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...