Проблемы с append () - PullRequest
       2

Проблемы с append ()

0 голосов
/ 15 сентября 2018

Я пытаюсь добавить разные массивы в Python в пустой список x с помощью x.append ().Вот что я сделал:

x = []
y = np.zeros(2)
for i in range(3):
    y += 1
    x.append(y)

x
[array([3., 3.]), array([3., 3.]), array([3., 3.])]

Проблема, как вы видите, заключается в том, что он повторяет последний результат, и я хочу получить список с различными массивами внутри, например: [[3., 3.],[4., 4.], [5., 5.]].

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Подробно комментируя вашу проблему.

Python все время работает с одним и тем же экземпляром y. В конце цикла вы можете думать о своем списке x как: x = [y, y, y], и каждое изменение, сделанное в y, применялось к каждой записи в x.

Если вы хотите иметь уникальную копию на каждой итерации, вам нужно сделать полную копию переменной.

import copy
x = []
y = np.zeros(2)
for i in range(3):
  y = copy.deepcopy(y) # based on the comment it is enough  
  y += 1               # to put y = y + 1 (also creates a new copy)
  x.append(y)

Надеюсь, это поможет вам немного лучше понять, что сделал Python (см. Также Неизменяемые и изменяемые типы для получения более подробной информации).

Тем не менее, это кажется довольно неэффективным.

0 голосов
/ 15 сентября 2018

Используйте функцию full () для numpy. Вам нужно указать размер массива (в нашем случае 1 строка, 2 столбца) и значение, которое вы хотите заполнить, то есть значение, предоставленное i

* 1002.*

x

[array([[0, 0]]), array([[1, 1]]), array([[2, 2]])]
0 голосов
/ 15 сентября 2018

Вы меняете один и тот же массив по всему циклу, переместите создание y в свой цикл:

x=[]
for i in range(3):
   y = np.zeros(2) + i
   x.append(y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...