首页 > 解决方案 > 遍历数组列表并通过迭代器更改列表元素

问题描述

我遇到了一段代码,据我所知,它不应该起作用。我正在遍历一个 Numpy 数组列表并想要剪辑它的内容。对于列表的操作,使用了迭代器。

据我了解,for 循环的迭代器被分配了列表中的值。因此,更改迭代器的值不应影响列表本身。在显示的代码示例中,使用了 numpy 函数 clip 并将迭代器分配给 out 参数以进行就地裁剪。与此类似,我对某些数字执行相同操作并使用就地运算符 iadd。

#Clip the arrays
a=np.array([4,5,1])
b=np.array([-4,3,-2])
c=np.array([3,4,-5])
print("Array before clipping:",a,b,c)
for iterator in [a, b, c]:
   np.clip(iterator, -3,3,out=iterator)
print("Array after clipping:",a,b,c)

#doing in-place calculation
d=3
e=4
print("Numbers before clipping:",d,e)
for iterator2 in [d,e]:
    iterator2 = operator.iadd(iterator2,2)
print("Numbers after clipping:",d,e)

我希望列表不会更改。即使是就地操作也只能操作迭代器的内存位置。但是,对于裁剪情况,列表已更改。这个怎么可能?

裁剪前的数组:

[4 5 1] [-4  3 -2] [ 3  4 -5]

裁剪后的数组:

[3 3 1] [-3  3 -2] [ 3  3 -3]

剪裁前的数字:

3 4

剪裁后的数字:

3 4

标签: pythonloopsnumpy

解决方案


您应该考虑使用copy.copycopy.deepcopy


推荐阅读