【问题标题】:Python - Setting Values within an Array of Array [duplicate]Python - 在数组数组中设置值
【发布时间】:2018-11-18 06:35:05
【问题描述】:

我有以下功能:

def set_x(self,index1, index2, val):
    print('Setting X with index1 : ' + str(index1) + ' , index2 : ' + str(index2) + ' with value : ' + str(val))
    print(self.x)
    self.x[index1][index2] = val
    print(self.x)
    print('hehe')

例如我调用它,参数为 0、1 和 785。实际输出如下:

Setting X with index1 : 0 , index2 : 1 with value : 785
[[305, 665], [305, 665]]
[[305, 785], [305, 785]]

我希望它是:

Setting X with index1 : 0 , index2 : 1 with value : 785
[[305, 665], [305, 665]]
[[305,785],[305,665]]

就像我的任务是设置数组中所有数组的所有第二个元素。我将如何解决它?

【问题讨论】:

  • 应该可以!您的函数是正确的,错误来自代码的其他部分。
  • @rv7 --> 可能是因为 self.x 被多个应用程序访问。
  • 是的,可能是这个原因。
  • 你为什么用array标记你的问题?您正在处理lists - 数组位于 numby 或数组模块中。你为什么要标记python-2.7 python-3.x - 你真的在使用cross-3.x-2.7 解决方案吗?只标记你真正使用的并且对你的代码有 importance 的东西。您是否阅读了任何标签说明?

标签: python arrays python-3.x python-2.7 list


【解决方案1】:

可能是因为 self.x 中的两个列表引用了同一个列表。这取决于您最初是如何创建 x 的。看这个例子

a=[305,665]
x = []
x.append(a)
x.append(a)
x[0][1]=3
print(x)
#[[305, 3], [305, 3]]

当您设置值 ox x[0][1] 时,您真正要做的是更改 a[1] 的值,因此两个列表都在更改。您应该改用列表的副本。

from copy import deepcopy
a = [305, 665]
x = []
x.append(deepcopy(a))
x.append(deepcopy(a))
x[0][1] = 3
print(x)
#[[305, 3], [305, 665]]

【讨论】:

  • 非常感谢。我花了几天的时间,试图弄清楚。我正在开发一款游戏,因为这件小事,我完全强调完成我的项目。谢谢你,阿爸耶和华保佑你。
猜你喜欢
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2018-09-07
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多