首页 > 解决方案 > 在python中几次迭代后错误地附加了列表

问题描述

这是我的python代码:

import numpy as np
import copy

x_input = np.array([[ 0.0000000,    0.0000000,  0.0000000],
                    [ 0.7570000,    0.5860000,  0.0000000]])

x_input_ = np.array([[ 0.0000000,   0.0000000,  0.0000000],
                    [ 0.7570000,    0.5860000,  0.0000000]])

# x_input_ = copy.deepcopy(x_input)

delta = 0.1
xlist = []
for i in range(len(x_input)):
    for j in range(np.shape(x_input)[1]):
            print(i,j)
            print (x_input)
            x_input[i,j] = x_input[i,j] + delta
            print(x_input)
            xlist.append(x_input)
            print('xlist:')
            print(xlist)
            x_input = x_input_
print(xlist)         

问题:为什么在 i=0, j=2 迭代附加xlist错误?但是在 i=0,j=0 和 i=0,j=1 时,这xlist是正确的。

标签: pythonarrayslistappend

解决方案


您的列表包含对最初称为 的数组的一个引用,以及对该数组的x_input另外五个引用x_input_(带有尾随下划线)。

如果您每次都想要单独的引用,您可能想要复制数组,而不是重复引用它。我不确定你期望什么输出。

如果您想要累积结果,以便列表中的每个连续数组都是前一个数组,请将该append行更改为:

xlist.append(copy.deepcopy(x_input))

并摆脱循环中的最后一行,即 rebind x_input

如果您希望每个数组与原始值相比只有一个更改(每个数组不同),请保持附加不变,并将循环的最后一行更改为:

x_input = copy.deepcopy(x_input_)

推荐阅读