在for循环期间附加带有数组的列表

时间:2016-10-22 21:20:08

标签: python arrays loops for-loop

我对python非常陌生,而且我有点不紧张。

我试图运行一个for循环,它为2x2数组的每个元素添加1。但是,我想在每个循环后存储每个矩阵。我正在使用.append()来执行此操作,但它似乎只能多次存储最终结果。

result = []

def f():  
  x= np.matrix([[1, 2],[3, 4]])
  for i in range(5):
     result.append(x)
     x += 1
  return result

function = f()

print function

但输出是:

[matrix([[6, 7],
    [8, 9]]), matrix([[6, 7],
    [8, 9]]), matrix([[6, 7],
    [8, 9]]), matrix([[6, 7],
    [8, 9]]), matrix([[6, 7],
    [8, 9]])]'

这只是最后一次迭代的重复,而不是记录所有结果。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

InitialContext

<强>结果:

import numpy as np

result = []

def f():
  x = np.matrix([[1, 2],[3, 4]])
  for i in range(5):
     result.append(x + i)
  return result

res = f()

答案 1 :(得分:0)

正在发生的原因是在后端,Python通过指针处理所有内容。因此,无论何时附加x,您只需要添加指向x的指针。但是,然后,在每个阶段,您只是附加一个指向同一位置的指针。因此,它们都指向存储矩阵x的最终值的矩阵。相反,您应该通过附加x.copy()来创建矩阵的副本。修改后的代码为:

result = []

def f():  
  x= np.matrix([[1, 2],[3, 4]])
  for i in range(5):
     result.append(x.copy())
     x += 1
  return result

function = f()

print(function)

当我在Python 3上尝试时,我得到了输出

[matrix([[1, 2],
        [3, 4]]), matrix([[2, 3],
        [4, 5]]), matrix([[3, 4],
        [5, 6]]), matrix([[4, 5],
        [6, 7]]), matrix([[5, 6],
        [7, 8]])]