python - 遍历数组列表并通过迭代器更改列表元素
问题描述
我遇到了一段代码,据我所知,它不应该起作用。我正在遍历一个 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
解决方案
您应该考虑使用copy.copy
或copy.deepcopy
推荐阅读
- haskell - 在 Haskell 中使用 do 语句
- c# - Odata 如何对用户角色的 $expand 功能进行授权?
- ruby-on-rails - Rails pdf-extract gem 有 sqlite 作为依赖项,但我使用 pg 因为 Heroku 需要它所以捆绑安装失败
- java - 如何设置 jTextField 剪辑过长文本的位置?
- reactive-cocoa - 模拟反应式
? - javascript - 使用过滤器和每个过滤器过滤多个属性的数组
- matlab - 来自 Simulink 的系统调用与外部硬件 (Raspberry PI)
- php - php, phpMyAdmin sql 错误
- maximo-anywhere - Windows 文件系统上的 TPK 位置
- javascript - 以 Angular 5 滚动到班级